提问者:小点点

如何在一次操作中用不同的输入值更新文档中的多个记录?


例如,如果我们有一个产品变体场景,其中一个产品可以有很多变体。 如果我们想要更新产品及其变体,来自客户端应用程序的请求如下所示,并且我们不知道变体数组中的哪一个变体被客户端更改了,所以我们必须在每个请求中更新所有的变体数组来更新,如何使用“Mongoose,MongoDB”更新函数或批量写更新操作来处理这种情况?

注意:产品和变体是不同的文档,我想在一个单一的操作中更新变体

{
   "_id": "5ef4f34dd43f52cff62459aa",
   "brand":"5cc9aeeaa3918f2e43e046af",
   "isActive":true,
   "name":"Product V",
   "supplier":"5ccb24fc3760713f4d9dbd1b",
   "supplierCode":"12343212234r2",
   "tags":[
      "5cd90de9f374d90ed569ab35"
   ],
   "type":"5ccad8a1efe8713bc1cac566",
   "variants":[
      {
         "_id":"5ef4fad0e0e5dfd29e188811",
         "retailMarkup":0,
         "retailPrice":0,
         "sku":"T001-W-M",
         "inventory":[
            {
               "storeId":"5ef4fad0e0e5dfd29e188823",
               "quantity":0
            }
         ]
      },
      {
         "_id":"5ef4fad0e0e5dfd29e188811",
         "retailMarkup":0,
         "retailPrice":0,
         "sku":"T001-W-M",
         "inventory":[
            {
               "storeId":"5ef4fad0e0e5dfd29e188823",
               "quantity":0
            }
         ]
      }
   ]
}

共1个答案

匿名用户

正如在聊天中所讨论的,这将符合您的要求

var bulk = db.variants.initializeUnorderedBulkOp();

bulk.find( { _id: <variant_id_1> } ).update( { $set: <variant_doc_1>});

bulk.find( {_id: variant_id_2 } ).update( { $set: <variant_doc_2> } );
.....
bulk.execute();