node.js-在Mongodb对象数组中添加新字段

mxg2im7a  于 2023-01-12  发布在  Go
关注(0)|答案(1)|浏览(261)

我有一个用户集合,其中包含多个板块:

users : [
{
_id: '61234XXX'
plates: [
 {
   _id: '123'
   'color': 'orange'
 },
 {
   _id: '124'
   'color': 'blue'
 }
]
},
{
_id: '63456XXX'
plates: [
 {
   _id: '321'
   'color': 'orange'
 },
 {
   _id: '432'
   'color': 'green'
 }
]
}
]

我正在尝试找出一种方法,为每个用户向所有当前图版对象添加一个新字段:
我得说:

await User.findOneAndUpdate(
      { _id: '63456XXX' },
      {
        $set : {
          [`plates.0.plateStyle`]: "testValue"
        }
      }
  )

虽然这样做是可行的,但它并不适合这个目的。有没有更好的方法可以让我迭代?

qnyhuwrf

qnyhuwrf1#

您可以尝试以下查询:
下面我们使用array filters告诉mongo:如果您找到具有_id: "61234XXX"exists the plates的对象,则获取与plates不为空匹配的文档(elem)(以获取全部)并添加plateStyle

await User.updateMany({
  _id: "61234XXX",
  plates: {
    $exists: true
  }
},
{
  $set: {
    "plates.$[elem].plateStyle": "testValue"
  }
},
{
  arrayFilters: [
    {
      elem: { $ne: [ "$plates", [] ] }
    }
  ]
})

示例here
此外,如果您通过_id查找,您将不需要updateMany,因为_id是唯一的,只有1或0个结果。

相关问题