javascript - 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}
但这将返回对任何内容项的最新评论,而不是每个内容的最新评论。
如何修改查询以返回每个内容项的最新评论?
解决方案
$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);
推荐阅读
- oracle - 如何导出 .bqy 文件中包含的 hyperion 报告的元数据
- python - Python中的约束优化求解器
- ios - UIStoryboard segue 失败
- javascript - 失去功能外的价值
- bash - 通过添加整数值 1 重命名多个文件
- asp.net - Jqgrid-editrow-getcell
- mxnet - 使用 _contrib_MultiBoxPrior 错误将 MXNet 模型导出到 ONNX
- node.js - 如何在生产环境中运行 Tabler
- netsuite - SuiteBundle 无法更新
- php - 管理界面中每个页面中的PHP编码问题