Javascript 当Mognose中的文档状态设置为false时,如何从数组中删除嵌入的文档
我正在认真寻找解决猫鼬问题的办法。 我使用的是Express、Mongoose和Graphql 首先,我有一个用户和组集合,如下所示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时,我正在尝试从组用户数组中删除用户文档 以下是我迄今为止所做的工作
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}
,但没有改变数据库文档…我已经更新了我的答案。请试一试。