0

ドキュメントの簡単な例を次に示します。

{  
   "username":"someUsername",
   "bank":[  
      {  
         "item_id":45,
         "item_amount":10
      },
      {  
         "item_id":45,
         "item_amount":10
      }
   ]
}

item_id=45 の item_amount の値を 3 ずつ増やすにはどうすればよいですか? item_id=45 が配列に存在しない場合、それが追加され、item_amount の値が 3 になるようにします。

MongoCollection の updateOne は、Java で mongodb を操作する最新の方法だと思います。その方法を使用したいのですが、適切な方法がわかりません。(古い更新方法を使用して多くの回答を見つけたので、有用なものが欠けていない限り、それらを参照しないでください)。

4

1 に答える 1

0

次のスニペットで試してください;0

db.items.find({'bank.item_id': 45}).forEach(function(myDoc) {
    var count_action = {};
    if (is_itemid_exist(45,myDoc.bank,'item_id')) {
        count_action['bank.$.item_amount'] =3; 
        db.items.update(
        {'bank.item_id': 45},
        {
            $inc: count_action 
        });
    } else {
        db.items.insert({'bank': [{'item_id':45,' item_amount':3}]})
    }
});

上記のクエリで使用される関数 is_itemid_exist -

function is_itemid_exist(value, search,key) {
        if (!search || (search.constructor !== Array && search.constructor !== Object)) {
            return false;
        }
        for (var i = 0; i < search.length; i++) {
            if (search[i].key === value) {
                return true;
            }
        }
        return false;
    }

ありがとう

于 2015-04-17T07:29:36.483 に答える