【问题标题】:Get to bunch of post IDs the latest comment respectively in MongoDB in one query在一个查询中分别在 MongoDB 中获取一堆帖子 ID 的最新评论
【发布时间】:2017-06-22 15:54:18
【问题描述】:

我有一个帖子 ID 数组。对帖子的评论是它自己的集合,而不是嵌入的。现在我想在一个查询中检索每个帖子 ID 的最新评论。 post_id 是每个评论文档中的一个字段,当然还有一个 timestamp

帖子:

{
  _id: 123
}

评论:

{
  _id: 567,
  post_id: 123,
  timestamp: 1498117182
}

【问题讨论】:

  • 不是很清楚。请从您的收藏中添加示例文档,以及预期的输出
  • 我想他想要什么已经很清楚了。 @OP AFAIK 无法在 mongodb 的 1 个查询(如连接)中查询多个集合。因此,您必须在 2 个查询中执行此操作。我建议使用$slice 查看投影以获取 cmets 数组的最后一个元素,然后在 cmets 上使用正常查找
  • @p.streef 您可以使用 $lookup 查询多个集合并在 mongodb 中执行连接(当然如果两个集合有共同的字段)
  • 那好吧!这意味着您应该能够使用 $match,$project,$lookup 聚合管道来获得所需的内容。我在这里假设您将 cmets 推到队列的后面,最后一个也是最新的

标签: mongodb


【解决方案1】:

由于评论具有帖子 ID,因此比我最初的想法要简单一些。首先你得到你的 postId 数组中的所有 cmets。按时间戳(最新的优先)对 cme​​ts 进行排序,然后按 postId 分组,并为您的字段使用第一个值

db.getCollection('comments').aggregate([
    {$match: {
        post_id: {$in : idArray}
        }},
    {$sort:{ timestamp : -1 }}, 
    {$group:{
        _id :  post_id,
        timestamp: { $first: "$timestamp" },
        comment_id: { $first: "$_id" }
        }}

]);

【讨论】:

  • 在$group部分,不应该是_id: "$post_id"吗?
  • 你是对的。我没有完全检查语法
猜你喜欢
  • 2019-04-13
  • 2015-11-18
  • 1970-01-01
  • 2013-03-09
  • 2017-03-09
  • 2013-05-25
  • 1970-01-01
  • 2012-07-15
  • 2016-01-02
相关资源
最近更新 更多