我想知道在MongoDB中获取特定文档的相关文档的最佳实践是什么。
情景如下: 我需要获得用户共享的帖子,我还需要获得与这些帖子相关的评论总数。
我想尽可能使用MongoDB Aggregation方法(如果这是最好的方法) 我知道如何使用单独的方法.count()和.find()。
执行此查询 帖子集合中的文档:
{
_id: ObjectId('5a66321e7e2043078bc3b88a'),
uid: 'UniqueIDofTheUser',
text: 'Post text'
}
评论集合中的文档
{
_id: ObjectId('5a66321e7e2043078bc3b88c'),
uid: 'UniqueIDofTheUser',
post_id: ObjectId('5a66321e7e2043078bc3b88a'),
text: 'Comment text'
}
期望的结果:
[
{
_id: ObjectId('5a66321e7e2043078bc3b88a'),
uid: 'UniqueIDofTheUser',
text: 'Post text',
commentsCount: 20
},
{
_id: ObjectId('5a66321e7e2043078bc3b88c'),
uid: 'UniqueIDofTheUser',
text: 'Another post',
commentsCount: 3
},
{
_id: ObjectId('5a6632e17e2043078bc3b88f'),
uid: 'UniqueIDofTheUser',
text: 'Some random post',
commentsCount: 4
},
]
答案 0 :(得分:2)
您只需执行$lookup
即可为返回的评论提取$size
每条帖子的已发布评论。
db.posts.aggregate(
[{ $lookup: {
from: "comments",
localField: "_id",
foreignField: "post_id",
as: "commentsCount"
} },
{ $addFields: { "commentsCount": { $size: "$commentsCount" } } }]
)