更新了 MongoDB 中的嵌套集合字段值

时间:2021-05-10 12:10:58

标签: mongodb mongodb-query

我有一个商店集合,每个元素如下所示:

{
 "Name":"Contosco",
 "OperationalDetails" : [ 
        {
            "OperationalDay" : "Sun-Thu",
            "StartTime" : "10:00 AM",
            "EndTime" : "06:00 PM"
        }, 
        {
            "OperationalDay" : "Fri-Sat",
            "StartTime" : "04:00 PM",
            "EndTime" : "09:30 PM"
        }
    ],
}

我需要将所有商店的所有 OperationalDetails 的 EndTime 更新为“06:00 PM”

我正在运行以下查询

db.stores.update({"Sector.Code": 'GROC'}, { '$set': {"OperationalDetails.$[].EndTime" : '06:00 PM'} },{multi:true} );

但我收到以下回复

Cannot apply array updates to non-array element OperationalDetails: { 0: { EndTime: "06:00 PM" } }

知道我如何实现这一目标。

1 个答案:

答案 0 :(得分:1)

正如您从 here 中看到的,您拥有的语法运行良好。

该错误意味着它正在尝试将数组更新应用于无数组值,这意味着您有一个与查询匹配的文档,但 OperationalDetails 不是数组而是不同的类型。

要找到这个对象,您可以使用 $type,如下所示:

db.collection.find({
  OperationalDetails: {
    $not: {
      $type: 4
    }
  }
})

Mongo Playground