1

API Java mongodb に大きな問題があります。DBCollection クラスの update メソッドでリクエストを使用し、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,

        } ]}
4

1 に答える 1

0

問題は、アップセット フラグを true に設定することです。つまり、条件に一致するドキュメントが見つからない場合にドキュメントを作成する必要があります。データベース内の基準に一致するドキュメントがない場合、mongo シェルは同じことを行います。

クエリをこれに変更すると、

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

常に機能するはずです。

于 2013-07-24T20:33:30.400 に答える