繁体   English   中英

更新 Mongo DB 中的数组列表

[英]Updating array list in Mongo DB

我想更新插槽数组列表中的状态字段,其中 id =“”。

样本数据

{
  "_id": ObjectId("621e816e7a938400016c5c64"),
  "Resource": "abc@gmail.com",
  "School": {
    "Class": [
      {
        "Type": "ABC",
        "Slots": [
          {
            "id": "",
            "Duration": "1 week",
            "Status": "Released",
            "Selected": true
          },
          {
            "id": "123",
            "Duration": "1 week",
            "Status": "Released",
            "Selected": true
          }
        ]
      }
    ]
  }
}

这就是我接近的方式:

db.getCollection("XYZ").update({
  "Resource": "abc@gmail.com",
  "School.Class": {
    "$elemMatch": {
      "Type": "ABC",
      "Slots.Status": "Released",
      "Slots.id": "",
      "Slots.Duration": "1 week"
    }
  }
},
{
  $set: {
    "School.Class.$[outer].Slots.$[inner].Status": "Confirmed"
  }
},
{
  "arrayFilters": [
    {
      "outer.Type": "ABC"
    },
    {
      "inner.Duration": "1 week"
    }
  ]
})

但它正在更新两个数组列表确认的状态。如何更新“Slots.id”:“”的特定字段。 如果数据中有任何错位或括号丢失,请原谅我

如果我理解正确的话,你就快到了,因为你只想更新id""的值,你必须将该条件添加到arrayFilters"inner.id": ""

db.collection.update({
  "Resource": "abc@gmail.com",
  "School.Class": {
    "$elemMatch": {
      "Type": "ABC",
      "Slots.Status": "Released",
      "Slots.id": "",
      "Slots.Duration": "1 week"
    }
  }
},
{
  $set: {
    "School.Class.$[outer].Slots.$[inner].Status": "Confirmed"
  }
},
{
  "arrayFilters": [
    {
      "outer.Type": "ABC"
    },
    {
      "inner.Duration": "1 week",
      "inner.id": ""  // <--- This line
    }
  ]
})

这里的例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM