mongodb - 在 MongoDB 中通过 id 更新文档中的字段

标签 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
        }   ] }

我想在 _id = 531cc2410b4ebf000036b2d7 的文档和 id=1111 的内部项目中为 qty 添加 +1。

这可能吗?

编辑:

使用此代码

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

        success(docs);
    });

我有错误:

cannot apply the position operator without a corresponding query field containing an array

终于成功了:

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

        success();
    });

最佳答案

是的。只需使用 $incpositional $运算符(operator):

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

$ 匹配您在更新的查询部分匹配 的元素的索引。这允许语句的更新部分知道要寻址数组中的哪个元素。

关于mongodb - 在 MongoDB 中通过 id 更新文档中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22356110/

相关文章:

python - 使用 MongoDB 列表中的日期字段作为 Pandas DataFrame 中的 DatetimeIndex

mongodb - MGO : Can't canonicalize query: BadValue unknown operator: $meta

mongodb - 如何使用多个组合字段的过滤器在集合中查找文档?

mongodb - $nin 与 $expr

javascript - Node js和mongo更新文件中不存在的数据但数据存在于数据库中

java - AggregationResults 类型转换 MongoDB + Spring 数据 + 聚合

java - 从 Java 应用程序中启动 mongodb

java - MongoDB 类似于 Java 中的操作

mongodb - 运行 mongodump 后我得到一个空目录

MongoDB elemmatch数组中的多个元素