mongodb 我正在尝试为集合中的所有用户在嵌套文档上执行拉操作,其中该嵌套文档具有匹配的eventId字段

iqxoj9l9  于 2022-11-28  发布在  Go
关注(0)|答案(1)|浏览(124)

我想在userSignedUpEvent字段中提取一个与给定的eventId匹配的嵌套文档。让我感到困难的是,我想为users集合中的所有用户运行这个。因为许多用户都注册了这个事件,如果它被删除,我需要从每个用户的userSignedUpEvents字段中删除它。

示例用户文档:

{
  "_id": {
    "$oid": "636c1778f1d09191074f9690"
  },
  "name": "Wayne Wrestler",
  "email": "wakywayne80@gmail.com",
  "image": "https://lh3.googleusercontent.com/a/ALm5wu32gXjDIRxncjjQA9I4Yl-
  "userSignedUpEvents":[
        0:{
              eventId: 636c1778f1d09191074f9690
              eventName: "onmygod"
}
]
}

尝试次数:

第一次

xtupzzrd

xtupzzrd1#

一个选项是:

db.users.updateMany(
  {userSignedUpEvents: {$elemMatch: {eventId: eventId}}},
  {$pull: {userSignedUpEvents: {eventId: eventId}}},
)

了解它在playground example上的工作原理

**EDIT:**另一个选项是:

db.collection.update(
  {userSignedUpEvents: {$elemMatch: {eventId: eventId}}},
  [
    {$set: {
      userSignedUpEvents: {
        $filter: {
          input: "$userSignedUpEvents",
          cond: {$ne: ["$$this.eventId", eventId]}
        }
      }
    }}
  ],
  {multi: true}
)

了解它在playground example上的工作原理

相关问题