【发布时间】:2021-03-28 18:30:47
【问题描述】:
这是我的organization 收藏。
[{
"_id" : ObjectId("5fd5fc1b9f117029b5233b2e"),
"name" : "ClassA",
"orgMembers" : [
{
"_id" : ObjectId("5fd5fc1b9f117029b5233b2f"),
"userId" : "Ben",
},
{
"_id" : ObjectId("5fd5fc1b9f117029b5233b2f"),
"userId" : "Anton",
}
],
},
{
"_id" : ObjectId("5fd5fc1b9f117029b5233b2e"),
"name" : "ClassA",
"orgMembers" : [
{
"_id" : ObjectId("5fd5fc1b9f117029b5233b2f"),
"userId" : "Ben",
}
],
}]
每个文档都有_id、name、orgMembers等属性,它们代表文档信息。
而orgMembers 是属于组织的成员(_id, userId) 的数组。
在此collection 中,我想获取包含 orgMember 和 Anton 为 userId 的组织,以及获取的组织文档的 orgMembers 应仅包含 Anton 作为 orgMember。
预期结果也是这样
[{
"_id" : ObjectId("5fd5fc1b9f117029b5233b2e"),
"name" : "ClassA",
"orgMembers" : [
{
"_id" : ObjectId("5fd5fc1b9f117029b5233b2f"),
"userId" : "Anton",
}
],
}]
这里ClassA组织有两个orgMember,但需要过滤匹配userId。
我试过了
documentModel.find({ 'orgMembers.userId': 'Anton' })
但是在这个查询中,我得到这样的结果。
[{
"_id" : ObjectId("5fd5fc1b9f117029b5233b2e"),
"name" : "ClassA",
"orgMembers" : [
// should be omitted
{
"_id" : ObjectId("5fd5fc1b9f117029b5233b2f"),
"userId" : "Ben",
},
// should be contained
{
"_id" : ObjectId("5fd5fc1b9f117029b5233b2f"),
"userId" : "Anton",
}
],
}]
对于预期的结果,应该省略带有userId: Ben 的orgMember。
如何使用 mongo 查询获得预期结果?
【问题讨论】:
标签: node.js database mongodb mongoose mongodb-query