【问题标题】:mongoDB + Node update field from all documents来自所有文档的 mongoDB + 节点更新字段
【发布时间】:2014-03-13 21:22:35
【问题描述】:

我需要从出现在所有文档的其他文档中的子文档中更新一个字段...

像这样,我有一些像这样的文件:

{
  "_id": { "$oid" : "531cc2410b4ebf000036b2d7" },
  "name": "ALMACEN 2",
  "items": [
    {
      "_id": { "$oid" : "531ed4cae604d3d30df8e2ca" },
      "brand": "BJFE",
      "type": 0,
      "color": "GDRNCCD",
      "hand": 1,
      "price": 500,
      "model": 0,
      "qty": 24
    },
    {
      "_id": { "$oid" : "531ed4cae604d2330df8e2ca" },
      "brand": "BJFE",
      "type": 0,
      "color": "GDRNCCD",
      "hand": 1,
      "price": 500,
      "model": 0,
      "qty": 12443
    },
    {
      "_id": { "$oid" : "531ed22ae604d3d30df8e2ca" },
      "brand": "BJFE",
      "type": 0,
      "color": "GDRNCCD",
      "hand": 1,
      "model": 0,
      "price": 500,
      "qty": 5
    }
  ]
}

我想将所有包含 _id 531ed22ae604d3d30df8e2ca 项目的文档的数量设置为 0

我现在拥有它

warehouses.update({$.items._id: new ObjectID(item.brand._id)}, { $set: { qty: 0}}, {safe: false, multi: true}, function (e) {
        if (e) {
            error(e);
            return;
        }

        success();
    });

但我认为查询不正确..

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    您需要使用"$" 位置运算符来实现此目的:

    db.warehouses.update({"items._id": "531ed22ae604d3d30df8e2ca"}, { $set: { "items.$.qty":0} } )
    

    【讨论】:

      【解决方案2】:

      在 mongo 控制台中它看起来像这样:

      do {
        db.warenhouse.update(
          {
            "_id" : "531cc2410b4ebf000036b2d7",
            items: {
              $elemMatch: {
                qty: { $ne: 0 }
              }
            }
          },
          {
            $set: {
              "items.$.qty": 0
            }
          }
        )
      } while (db.getPrevError().n != 0);
      

      资源link

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-24
        • 2022-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多