在一个查询中分别获取MongoDB中最新评论的帖子ID

在一个查询中分别获取MongoDB中最新评论的帖子ID,mongodb,Mongodb,我有一个post ID数组。对帖子的评论是一个单独的集合,不嵌入其中。现在我想在一个查询中检索每个帖子ID的最新评论。post_id是每个评论文档中的一个字段,当然也是一个时间戳 职位: 评论: { _id: 567, post_id: 123, timestamp: 1498117182 } 因为评论有帖子id,所以比我最初的想法要简单一些。首先,您将获得postId数组中的所有注释。按时间戳latest排序注释,然后按postId排序,并将第一个值用于字段 db.getColl

我有一个post ID数组。对帖子的评论是一个单独的集合,不嵌入其中。现在我想在一个查询中检索每个帖子ID的最新评论。post_id是每个评论文档中的一个字段,当然也是一个时间戳

职位:

评论:

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

因为评论有帖子id,所以比我最初的想法要简单一些。首先,您将获得postId数组中的所有注释。按时间戳latest排序注释,然后按postId排序,并将第一个值用于字段

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

]);

不太清楚。请添加您收集的样本文档,预期的ouputI我认为很清楚他想要什么@顺便说一句,像mongodb中的连接一样,不可能在一个查询中查询多个集合。因此,您必须在两个查询中完成此操作。我建议使用$slice查看投影,以获取comments数组的最后一个元素,然后在comments@p.streef如果两个集合有一个共同的字段,您可以查询多个集合并在mongodb中执行join,当然可以使用$lookupWell ok!这意味着您应该能够使用$match、$project、$lookup聚合管道来获取所需的内容。我假设你把评论推到队列的后面,最后一个也是$group部分的最后一个,它不应该是_id:$post_id吗?你是对的。我没有完全检查语法
db.getCollection('comments').aggregate([
    {$match: {
        post_id: {$in : idArray}
        }},
    {$sort:{ timestamp : -1 }}, 
    {$group:{
        _id :  post_id,
        timestamp: { $first: "$timestamp" },
        comment_id: { $first: "$_id" }
        }}

]);