Javascript 当Mognose中的文档状态设置为false时,如何从数组中删除嵌入的文档

Javascript 当Mognose中的文档状态设置为false时,如何从数组中删除嵌入的文档,javascript,express,mongoose,Javascript,Express,Mongoose,我正在认真寻找解决猫鼬问题的办法。 我使用的是Express、Mongoose和Graphql 首先,我有一个用户和组集合,如下所示 user { name: string, groupAsMember: [groups], status: boolean } group { name: string, members: [user], status: boolean } 当用户状态设置为false时,我正在尝试从组用户数组中删除用户文档 以下是我迄今为止所做的工作

我正在认真寻找解决猫鼬问题的办法。 我使用的是Express、Mongoose和Graphql

首先,我有一个用户和组集合,如下所示

user {
  name: string,
  groupAsMember: [groups],
  status: boolean
}

group {
  name: string,
  members: [user],
  status: boolean
}
当用户状态设置为false时,我正在尝试从组用户数组中删除用户文档

以下是我迄今为止所做的工作

return User.findOneAndUpdate(
  {_id: id},
  {$set: {status: false}},
  {new: true, useFindAndModify: false}
)
  .exec()
  .then(async (user) => {
    // return await Group.find({'_id': {$in: user.groupAsMember}})
    //   .then(group => {
    //     console.log(group)
    //   })
    return await Group.updateMany(
      {'_id': {$in: user.groupAsMember}},
      // {$pull: {"members.$._id": user._id}},
      // {$pull: {"member._id": {$eq: user.id}}}
      {$pull: {"members.id": user._id}},
      {new: true, useFindAndModify: false}
    )
      .then((user) => {
        console.log(user);
        return user;
      })
      .catch((err) => {
        console.log(err);
        return err;
      })
  })
  .catch((err) => console.error(err));
正如您可以看到我评论的代码一样,我尝试了在网上找到的不同解决方案。 但我不断地遇到错误,比如

Cannot use the part (id) of (members.id) to traverse the element ({members: [ ObjectId('5f985ffc59355439ac59598e'), ObjectId('5f9a328c83eb44243021d756') ]})

unknown top level operator: $eq

The positional operator did not find the match needed from the query.

如果你知道答案,请帮助我。
提前非常感谢。

如果没有,请尝试这样做。它应该适合您:

 { $pull: { members: { _id: { $eq: user._id } } } }
另外,如果您使用的是async await,则不需要编写
。然后编写
,因为await将始终返回承诺。应该如此

    return await Group.updateMany(
      {'_id': {$in: user.groupAsMember}},
      { $pull: { members: { _id: { $eq: user._id } } } }
      {new: true }
    )

谢谢你的评论,我已经试过了。但是它不起作用,,,虽然我收到了这个消息
{n:2,nModified:2,ok:1}
。似乎是意识到我在尝试什么。但在数据库中的实际文档中,并没有任何变化……我认为我的答案中有打字错误。请用members替换member,然后现在检查它是否显示
用户{n:0,nModified:0,ok:1}
。但我相信你是对的,它应该是成员,虽然…对不起,它仍然说
{n:2,nModified:2,ok:1}
,但没有改变数据库文档…我已经更新了我的答案。请试一试。