首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MongoDB中获取带有n个最新注释的帖子

在MongoDB中获取带有n个最新注释的帖子
EN

Stack Overflow用户
提问于 2018-11-09 21:58:12
回答 1查看 76关注 0票数 2

因此,这是一个常见的问题,有评论的帖子,我似乎不能在MongoDB中解决,不像在MySQL中,后者很容易用left-join解决。

问题:

我想获取最新的8篇文章2最近的评论在MongoDB中的每一篇文章

  • 我不希望重新构造post数据以包含匹配的注释i列表,因为我希望将来会有数千条注释。
  • 我真的不想求助于获取帖子,然后使用post id执行8次单独的查询来查找最新的2条评论。(尽管我认为这是第二个最好的解决方案)
  • 我尝试过设置postSchema.virtual('comments', ..),然后在执行查询时使用Post.find(..).populate('comments', options: {limit: 2})填充,但不幸的是限制返回不一致结果

数据:

代码语言:javascript
复制
Post:
{ body: "post1" }
{ body: "post2" }
{ body: "post3" }
...
{ body: "post8" }

Comment:
{ post_id: 1, message: "comment1" }
{ post_id: 2, message: "comment2" }
{ post_id: 2, message: "comment3" }
{ post_id: 3, message: "comment4" }

所有文档都有一个date字段,但由于简洁而被删除。

预期结果:

代码语言:javascript
复制
{ 
  body:"post1", 
  comments: [
    { post_id: 1, message: "comment1" }
  ]
}
{ 
  body:"post2", 
  comments: [
    { post_id: 2, message: "comment2" },
    { post_id: 2, message: "comment3" }
  ]
}
{ 
  body:"post3", 
  comments: [
    { post_id: 3, message: "comment4" }
  ]
}
...
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-09 22:18:29

如果您使用的是MongoDB 3.6或更高版本,您可以使用带有自定义管道的$lookup与注释“联接”帖子,并使用2个最近的帖子(使用$limit)。

代码语言:javascript
复制
db.posts.aggregate([
    {
        $sort: { date: -1 }
    },
    {
        $limit: 8
    },
    {
        $lookup: {
            from: "comments",
            let: { postId: "$_id" },
            pipeline: [
                { $match: { $expr: { $eq: [ "$$postId", "$post_id" ] } } },
                { $sort: { date: -1 } },
                { $limit: 2 }
            ],
            as: "comments"
        }
    }
])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53233771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档