使用upsert获取com.mongodb.MongoException中的$ DuplicateKey使用java的MongoDB
问题描述:
我无法使用java更新mongo db upsert的现有记录。 我写了一个查询来查找使用ID的记录,但试图更新其抛出com.mongodb.MongoException $ DuplicateKey异常。
的样本数据:
{"_id" : ObjectId("5788bef4191fda5c9077af78"),
"type" : "PRIVATE",
"users" : [
{
"_id" : "800",
"Name" : "Jack"
},
{
"_id" : "530a7998-ba3f-4366-8d21-bb1ca688cfdb",
"Name" : "Ashley"
}
]}
的Java查询
Query query = new Query();
query.addCriteria(Criteria.where("_id").is("5788bef4191fda5c9077af78"));
Update args = new Update();
args.addToSet("users", users);// users is a List<User>users.
args.addToSet("type", "GROUP");
mongoOps.upsert(query, args, Rooms.class, ROOMS);//mongoOps is MongoOperations
答
我们需要传递只列表addToset。并设置为更新字符串字段。
下面的代码工作和文档得到更新。
Update args = new Update(); args.addToSet("users", new BasicDBObject("$each", users)); args.set("type", "GROUP"); mongoOps.upsert(query, args, Rooms.class, ROOMS);
如果问题得到解决,请将其标记为“已解决”。 – Nattyk