需要更新mongodb中数组中的元素

时间:2019-01-31 16:48:48

标签: node.js mongodb

我正在尝试通过此更新查询来更新store = 465,AisleName = 59并将AisleSort = 34设置为以下代码

db.getCollection('products').update({'AvailableOnStores.AisleName': { '$eq': '59' }, 'AvailableOnStores.StoreNumber': { '$eq': '465' } }, { '$set': { 'AvailableOnStores.$.AisleSort': 34 } } ) 

然后它在465商店中更新为34,但该商店中没有该AisleName。我们在商店423中拥有该过道名称。我无法逐元素检查,因为我正在从json文件中检查所有这些信息,其中每个商店都包含sort和AisleName。

{

"ProductCode" : "6786777",
"AvailableOnStores" : [ 
    {
        "StoreNumber" : "465",
        "Price" : "19",
        "AisleSort" : 9,
        "AisleName" : "Checkout Lane",
        "AisleLocations" : [ 

            {
                "bayNumber" : 6,
                "description" : "Checkout Lane",

            }
        ]
    }, 
    {
        "StoreNumber" : "423",
        "Price" : "1",
        "AisleSort" : 5,
        "AisleName" : "59",
        "AisleLocations" : [ 
            {

                "description" : " Aisle 59",
            }, 
            {

                "description" : "Aisle 25",

            }, 
            {

                "description" : "Aisle 4",

            }
        ]
    }
],
"NotAvailableOnStores" : [],
"IsPricingVaries" : false
}

1 个答案:

答案 0 :(得分:0)

如果您要更新同时满足这两个条件的文档,则应像这样修改查询

db.getCollection('products').update(
  {
   'AvailableOnStores':{
         $elemMatch:{'AisleName':{ '$eq': '59' },'StoreNumber':{ '$eq': '465' }}}   
  }, 
  { 
   '$set': {'AvailableOnStores.$.AisleSort': 34 } 
  } 
)

作为参考,请阅读mongodb $elemMatch上的本文档,并告诉我是否需要更多帮助