2016-07-15 84 views
1

我无法使用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 

回答

0

我们需要传递只列表addToset。并设置为更新字符串字段。

下面的代码工作和文档得到更新。

Update args = new Update(); args.addToSet("users", new BasicDBObject("$each", users)); args.set("type", "GROUP"); mongoOps.upsert(query, args, Rooms.class, ROOMS); 
+0

如果问题得到解决,请将其标记为“已解决”。 – Nattyk