如何在mongodb中更新数组的多个项目

时间:2017-08-15 19:46:18

标签: node.js mongodb aggregate backend

这是我的文档架构:

  {
        "_id": "599345434a6caf2d9d2e2b67",
        "total": 870,
        "product_info": [
            {
                "product_id": "597de6e76dbf1a0004b98eb5",
                "mrp": 20,
                "quantity": 1,
                "name": "bottle",
                "product_status": 1
            },
            {
                "product_id": "597dea4c6dbf1a0004b98eba",
                "mrp": 300,
                "quantity": 1,
                "name": "purse",
                "product_status": 1
            },
            {
                "product_id": "597dea7d6dbf1a0004b98ebb",
                "mrp": 250,
                "quantity": 1,
                "name": "switch board",
                "product_status": 1
            },
            {
                "product_id": "597deade6dbf1a0004b98ebc",
                "mrp": 150,
                "quantity": 1,
                "name": "all out",
                "product_status": 1
            },
            {
                "product_id": "597deb196dbf1a0004b98ebd",
                "mrp": 150,
                "quantity": 1,
                "name": "neem extract",
                "product_status": 1
            }
        ],
        "shop_id": "597de6056dbf1a0004b98eb4",
        "shop_name": "Pradeep's Shop",
        "seller_uid": "469835666700",
        "user_id": "598b9b700354020004f674b6",
        "user_name": "bhupendra",
        "payment_id": "NA",
        "address_id": "NA",
        "payment_type": 1,
        "address_type": 1,
        "start_date": "2017-08-15T18:53:38.976Z",
        "last_update_date": "2017-08-15T19:02:27.245Z",
        "order_status": 1,
        "delivery_status": 1,
        "payment_status": 1,
        "delivery_date": "NA",
        "payment_date": "NA"
    }

在我的查询中,我将发送我需要更新的product_id列表以及我需要更改的product_status列表,例如

var product_ids=["597de6e76dbf1a0004b98eb5","597dea7d6dbf1a0004b98ebb"];
var product_status=[2,3];

那么如何才更新product_info中其id为product_ids数组的所有产品的product_status。

1 个答案:

答案 0 :(得分:2)

这应该适合你:

var bhupendra = localdb.collection('bhupendra');

var product_ids=["597de6e76dbf1a0004b98eb5","597dea7d6dbf1a0004b98ebb"];
var product_status=[2,3];

for (var i = 0; i < product_ids.length; i++) {
  bhupendra.update({_id: "599345434a6caf2d9d2e2b67", "product_info.product_id": product_ids[i]}, { $set: { "product_info.$.product_status" : product_status[i] } });
}