首页 > 解决方案 > MongoDB - 列表中每个 ID 的最新项目

问题描述

我有一个内容 ID 列表,我正在尝试获取列表中每个内容 ID 的最新评论(如果存在) -

我的查询如下所示:

const query = [
   { 
      $match: { 
         content_id: { $in: myContentIds }, 
      }, 
   }, 
   { $sort: { ‘comment_created’: -1 } }, 
]

const results = await collection.find(query).toArray();

我的理解是,这将获取数组中与 contentIds 相关的所有评论,myContentIds并根据日期按降序对它们进行排序。

然后我可以使用限制我的结果,{ $limit: 1}但这将返回对任何内容项的最新评论,而不是每个内容的最新评论。

如何修改查询以返回每个内容项的最新评论?

标签: javascriptnode.jsmongodbmongodb-query

解决方案


  • $group通过content_id并获取第一个最近的文档
  • $replaceRoot替换根目录中的最新文档(这是可选的,您可以按对象使用文档recentComment
const query = [
  { $match: { content_id: { $in: myContentIds } } },
  { $sort: { comment_created: -1 } },
  {
    $group: {
      _id: "$content_id",
      recentComment: { $first: "$$ROOT" }
    }
  },
  { $replaceRoot: { newRoot: "$recentComment" } }
];

const results = await collection.aggregate(query);

操场


推荐阅读