考えられる解決策の1つは、問題のツイートが「ツイートイド」配列にまだ存在していないことを確認するためにクエリ文書を変更することです。一致する場合、照会は一致せず、更新は実行されません。
JSシェルを使用した例です。サンプル文書なしで正確な答えを出すことは難しいので、私はあなたの文書構造を推測しました。うまくいけば、それは十分に近いので、例はあなたに関連しています。次の更新は、更新が再度実行される場合、「カウント」がないであろう
> db.hcoll.update({hashtag:"myHashTag", tweetsid:{$ne:"id1"}}, {$addToSet:{"tweetsid":"id1"}, $inc:{"count":1}})
> db.hcoll.find()
{ "_id" : 1, "count" : 1, "hashtag" : "myHashTag", "tweetsid" : [ "id1" ] }
「tweetsid」配列に「ID1」を追加し、「1カウント」の値をインクリメントする
> db.hcoll.save({_id:1, hashtag:"myHashTag", count:0, tweetsid:[]})
> db.hcoll.find()
{ "_id" : 1, "hashtag" : "myHashTag", "count" : 0, "tweetsid" : [ ] }
クエリの一部が一致しないため、増分してください。私はあなたはそれが存在しない場合に作成される文書をたいていることを示す、真のアップサート=でアップデートを実行しているあなたのポストから見
> db.hcoll.update({hashtag:"myHashTag", tweetsid:{$ne:"id1"}}, {$addToSet:{"tweetsid":"id1"}, $inc:{"count":1}})
> db.hcoll.update({hashtag:"myHashTag", tweetsid:{$ne:"id1"}}, {$addToSet:{"tweetsid":"id1"}, $inc:{"count":1}})
> db.hcoll.update({hashtag:"myHashTag", tweetsid:{$ne:"id1"}}, {$addToSet:{"tweetsid":"id1"}, $inc:{"count":1}})
> db.hcoll.find()
{ "_id" : 1, "count" : 1, "hashtag" : "myHashTag", "tweetsid" : [ "id1" ] }
>
。残念ながら、新しい "tweetsid"値が "tweetsid"配列にある場合、クエリは一致せず、upsertによって新しい文書が作成されるため、私が提示した更新はupsertでは機能しません。
> db.hcoll.update({hashtag:"myHashTag", tweetsid:{$ne:"id1"}}, {$addToSet:{"tweetsid":"id1"}, $inc:{"count":1}}, true, false)
> db.hcoll.find()
{ "_id" : 1, "count" : 1, "hashtag" : "myHashTag", "tweetsid" : [ "id1" ] }
{ "_id" : ObjectId("4f91ae48f48744310eab90d2"), "count" : 1, "hashtag" : "myHashTag", "tweetsid" : [ "id1" ] }
>
上記の方法で解決策を見つけることができます。
これは非常に役に立ち、あなたは私にそのやり方を教えてくれました!ありがとう! –