java - BasicDBObject 更新重复的同一文档

标签 java mongodb updates upsert

我的 api java mongodb 有一个大问题。我使用带有 DBCollection 类的更新方法的请求,在 mongodb 中我得到多个相同的文档,但值没有改变,请帮助我。我不想有重复的文档。

BasicDBObject query = new BasicDBObject();
query.append("ad", "man2ist").append("list.id", new BasicDBObject("$ne", "5")); //  "list.id" : {$ne : 0 }

BasicDBObject a = new BasicDBObject("id",String.valueOf(5)).append("value", 100);
BasicDBObject upd = new BasicDBObject("$addToSet",new BasicDBObject("list",a));
System.out.println(query);

System.out.println(upd);

WriteResult r = dbc.update(query,upd,true,false);

//db.friends.update({ "ad" : "man2ist" , "list.id" : { $ne : "4"} },{ $addToSet : { "list" : { "id" : "4","value" : 100}}},true,true);

我的文档在这里:

{
"ad" : "man2ist",
"createdDate" : ISODate(),
"list" : [
        {
                "id" : "45",
                "value" : 489
        },
        {
                "id" : "5",
                "value" : 20,

        },
        {
               "id" : "4578",

                "value" : 21,

        } ]}

最佳答案

问题在于您将翻转标志设置为 true,这意味着如果未找到与条件匹配的文档,则应创建该文档。如果数据库中没有符合条件的文档,mongo shell 也会执行相同的操作。

如果您将查询更改为此,

WriteResult r = dbc.update(query,upd,false,false);

它应该一直有效。

关于java - BasicDBObject 更新重复的同一文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17838893/

相关文章:

java - 使用 Timer 类的简单动画速度缓慢

mongodb - 如何获取使用 MongoDB C# 驱动程序创建 MongoDB 集合的日期?

json - 如何使用 jq 更新 json 文件中的子项?

linux - sudo apt upgrade 会更新我的微码吗?

java - 字符串拆分 Java 不工作

java - Spring 应用程序上的 NoClassDefFoundError

node.js - 如何将MongoDB文档存储在redis中作为缓存并超时刷新

javascript - Mongoose findById() 回调仅返回无意义的数据

cocoa - 如何在 swift 应用程序中使用 sparkle updater?

java - 检测 Android 中的数据更改