【发布时间】:2021-11-02 21:05:01
【问题描述】:
我有两个集合users 和posts。
用户有这样的文件:
{
_id: ObjectId('611142303c409b5dc826e563'),
name: 'foo'
}
posts 有这样的文档:
{
_id: ObjectId('611142303c409b5dc826e111'),
comments:[
{
owner: ObjectId('611142303c409b5dc826e563'),
description: "my description"
},
{
owner: ObjectId('611142303c409b5dc826e333'),
description: "my description2"
}
]
}
当我收到服务器端的请求时,我需要返回所有者的整个文档,而不仅仅是它的 id。
例如对于我必须返回的获取请求:
{
_id: ObjectId('611142303c409b5dc826e111'),
comments:[
{
owner:{
_id: ObjectId('611142303c409b5dc826e563'),
name: 'foo'
},
description: "my description"
},
{
owner: {
_id: ObjectId('611142303c409b5dc826e555'),
name: 'foo2'
},
description: "my description2"
}
]
}
为此,我执行了以下管道:
[
$lookup:{
from: 'owners',
localField: 'comments.owner',
foreignField: '_id',
as: 'owners_comments'
}
]
通过这种方式,我得到了一组所有者,这些所有者在一个特定文档中具有 cmets。
我的问题是如何为每条评论获取正确的所有者个人资料?我知道我可以更轻松地做服务器端,但我更喜欢做数据库端。
我想映射每个评论并在内部过滤 owners_comments,但在 mongo 聚合中我对此几乎没有问题。
你有什么建议吗?
【问题讨论】:
标签: node.js mongodb mongodb-query aggregation-framework