【问题标题】:Getting com.mongodb.MongoException$DuplicateKey in mongodb with java using upsert使用upsert在mongodb中获取com.mongodb.MongoException$DuplicateKey
【发布时间】:2016-11-18 14:43:59
【问题描述】:

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

【问题讨论】:

    标签: java mongodb mongodb-query


    【解决方案1】:

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

    以下代码有效,文档已更新。

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

    【讨论】:

    • 如果问题解决了,也请标记为“已解决”。
    猜你喜欢
    • 1970-01-01
    • 2011-05-24
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多