MongoDB:获取具有两个值的不同组合的最新文档 [英] MongoDB: Get newest documents with distinct combination of two values
本文介绍了MongoDB:获取具有两个值的不同组合的最新文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
[{
"_id": { "$oid" : "Object1" },
"created": { "$date" : "2021-11-14T10:58:01.456Z" },
"primaryId": "SomeId1",
"secondaryIdx": 0,
"otherData" : something
}
{
"_id": { "$oid" : "Object2" },
"created": { "$date" : "2021-11-13T10:58:01.456Z" },
"primaryId": "SomeId2",
"secondaryIdx": 0,
"otherData" : something
}
{
"_id": { "$oid" : "Object3" },
"created": { "$date" : "2021-11-15T10:58:01.456Z" },
"primaryId": "SomeId2",
"secondaryIdx": 1,
"otherData" : something
}
{
"_id": { "$oid" : "Object4" },
"created": { "$date" : "2021-11-16T10:58:01.456Z" },
"primaryId": "SomeId1",
"secondaryIdx": 0,
"otherData" : something
}]
并且我得到的集合应该只包含具有PrimiyID+Second DaryIdx唯一组合的文档。只要有多个文档具有此组合,我就只想获取最新的文档。 因此,我的结果应该如下所示:
{
"_id": { "$oid" : "Object2" },
"created": { "$date" : "2021-11-13T10:58:01.456Z" },
"primaryId": "SomeId2",
"secondaryIdx": 0,
"otherData" : something
}
{
"_id": { "$oid" : "Object3" },
"created": { "$date" : "2021-11-15T10:58:01.456Z" },
"primaryId": "SomeId2",
"secondaryIdx": 1,
"otherData" : something
}
{
"_id": { "$oid" : "Object4" },
"created": { "$date" : "2021-11-16T10:58:01.456Z" },
"primaryId": "SomeId1",
"secondaryIdx": 0,
"otherData" : something
}]
因此,将从结果中排除对象1,因为PrimiyID+Second Idx重复,并且对象4较新。
我目前在我的应用程序中实现了这一点,但我认为最好是在查询级别这样做,这样我的应用程序就不必加载不必要的大集合,然后可能必须立即过滤掉其中的一大部分。
推荐答案
您可以先$sort
primaryId: 1, secondaryIdx: 1, created: -1
。然后按primaryId + secondaryIdx
执行$group
,然后获取第一个文档。
db.collection.aggregate([
{
$sort: {
primaryId: 1,
secondaryIdx: 1,
created: -1
}
},
{
$group: {
_id: {
primaryId: "$primaryId",
secondaryIdx: "$secondaryIdx"
},
lastDoc: {
$first: "$$ROOT"
}
}
},
{
"$replaceRoot": {
"newRoot": "$lastDoc"
}
}
])
这是Mongo playground供您参考。
这篇关于MongoDB:获取具有两个值的不同组合的最新文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文