MongoDB查询:查找多个第一个匹配的文档
MongoDB query: Find multiple first matching document
我有一个具有以下架构的集合:
{
_id: ObjectId,
company: ObjectId,
endTime: date string
}
同一个 company
会有多个文档。
几个示例文档:
{_id: 1, company: companyA, endTime: Jan 1,2022}
{_id: 2, company: companyB, endTime: Feb 11,2022}
{_id: 3, company: companyA, endTime: Jan 3,2022}
{_id: 4, company: companyB, endTime: Jan 4,2022}
{_id: 5, company: companyA, endTime: Feb 21,2022}
{_id: 5, company: companyB, endTime: Jan 1,2022}
现在我想获取按结束时间 (desc) 排序的每个公司的第一个文档。我试过 aggregate
但没能完成。
以上文档的结果:
{_id: 5, company: companyA, endTime: Feb 21,2022}
{_id: 2, company: companyB, endTime: Feb 11,2022}
如有任何帮助,我们将不胜感激。
$sort
- 按 endTime
DESC. 排序
$group
- 按 company
分组并将第一个文档 ($first
) 作为 data
字段。
$replaceWith
- 将输入文档替换为 data
。
db.collection.aggregate([
{
$sort: {
endTime: -1
}
},
{
$group: {
_id: "$company",
data: {
$first: "$$ROOT"
}
}
},
{
"$replaceWith": "$data"
}
])
我有一个具有以下架构的集合:
{
_id: ObjectId,
company: ObjectId,
endTime: date string
}
同一个 company
会有多个文档。
几个示例文档:
{_id: 1, company: companyA, endTime: Jan 1,2022}
{_id: 2, company: companyB, endTime: Feb 11,2022}
{_id: 3, company: companyA, endTime: Jan 3,2022}
{_id: 4, company: companyB, endTime: Jan 4,2022}
{_id: 5, company: companyA, endTime: Feb 21,2022}
{_id: 5, company: companyB, endTime: Jan 1,2022}
现在我想获取按结束时间 (desc) 排序的每个公司的第一个文档。我试过 aggregate
但没能完成。
以上文档的结果:
{_id: 5, company: companyA, endTime: Feb 21,2022}
{_id: 2, company: companyB, endTime: Feb 11,2022}
如有任何帮助,我们将不胜感激。
$sort
- 按endTime
DESC. 排序
$group
- 按company
分组并将第一个文档 ($first
) 作为data
字段。$replaceWith
- 将输入文档替换为data
。
db.collection.aggregate([
{
$sort: {
endTime: -1
}
},
{
$group: {
_id: "$company",
data: {
$first: "$$ROOT"
}
}
},
{
"$replaceWith": "$data"
}
])