MongoDB计算相关文档的最佳实践

时间:2018-01-22 19:43:26

标签: node.js mongodb mongoose aggregation-framework

我想知道在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
    },
]

1 个答案:

答案 0 :(得分:2)

您只需执行$lookup即可为返回的评论提取$size每条帖子的已发布评论。

db.posts.aggregate(
 [{ $lookup: { 
    from: "comments", 
    localField: "_id", 
    foreignField: "post_id", 
    as: "commentsCount" 
 } }, 
 { $addFields: { "commentsCount": { $size: "$commentsCount" } } }]
)