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

标签 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

最佳答案

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

下面的代码有效并且文档已更新。

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

关于java - 使用java使用upsert在mongodb中获取com.mongodb.MongoException$DuplicateKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38395261/

相关文章:

java - ResultSet 行计数通过 .getRow() 使用 JDBC-ODBC 和 MS Access 给出错误答案

mongodb - 如何通过shell脚本执行mongo命令?

ruby-on-rails - 为 has_one 关系接受使用 mongoid 的嵌套属性

mongodb - $replaceRoot 在 mongodb 中

java - 导入无法解决(Junit)

java - 字符串[][]澄清

java - 我应该在 Java Web 应用程序中使用安全管理器吗?

node.js - 插入许多文档后关闭 node.js 中的 mongodb 连接

node.js - 如何查询 mongoDB 以获取其 _id 值与数组中的一个 _id 值匹配的文档?

python - 将 MongoDB(3.0) 集合的子集保存到 Python 中的另一个集合