使用upsert在java中使用java获取com.mongodb.MongoException $ DuplicateKey

时间:2016-07-15 11:42:24

标签: java mongodb mongodb-query

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

1 个答案:

答案 0 :(得分:0)

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

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

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