在MongoDB中通过id更新文档内部的字段

col*_*ore 5 mongodb mongodb-query

我想在集合中添加(+1)一个qty字段,其中包含以下文档:

    {"_id": { "$oid" : "531cc2410b4ebf000036b2d7" },
   "name": "ALMACEN 2",
   "items": [
        {
          "id": "111111",
          "marca": "BJFE",
          "tipo": 0,
          "color": "GDRNCCD",
          "mano": 1,
          "modelo": 0,
          "qty": 1
        },
        {
          "marca": "BJddFE",
          "tipo": 0,
          "color": "GDffRNCCD",
          "mano": 1,
          "modelo": 0,
          "qty": 3
        },
        {
          "marca": "BJeeFE",
          "tipo": 0,
          "color": "GDRNCCD",
          "mano": 1,
          "modelo": 0,
          "qty": 9
        }   ] }
Run Code Online (Sandbox Code Playgroud)

我想在文档中使用_id = 531cc2410b4ebf000036b2d7和内部项目添加+1到qty,id = 1111.

可能吗?

编辑:

用这个代码

warehouses.update(
    {_id: new ObjectID(warehouseId)},
    {"$inc": { "items.$.qty": -1 }},
     function (e, docs) {
        if (e) {
            error(e);
            return;
        }

        success(docs);
    });
Run Code Online (Sandbox Code Playgroud)

我有错误:

如果没有包含数组的相应查询字段,则无法应用位置运算符

最后这个工作:

 warehouses.update({_id: new ObjectID(warehouseId), "items.id": itemId}, {"$inc": { "items.$.qty": -1 }}, function (e) {
        if (e) {
            error(e);
            return;
        }

        success();
    });
Run Code Online (Sandbox Code Playgroud)

Nei*_*unn 6

是.只需使用$ inc位置$运算符:

db.collection.update(
    { _id: <matching id>, "items.id": 1111 },
    { "$inc": { "items.$.qty": 1 } }
)
Run Code Online (Sandbox Code Playgroud)

$场比赛你元素的索引匹配您更新的查询部分.这允许语句的更新部分知道要处理的数组中的哪个元素.