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 回答