我有一系列文件。每个文件都有rev,quote和各种其他属性。我需要按报价编号分组,然后选择具有最新版本的组中的单个文档。示例4文档各自带有引号12345和rev A-D我需要“D”文档,所有其他文档及其最新转录发送给客户端。 我发现了一个类似的问题here,但不能让它适合我。
查询
db.myCollection.aggregate([
{ "$group": {
"_id": "$quote",
"rev": { "$first":"$rev"}
}
])
集合
{
"_id" : ObjectId("58b6054c17c2cd53cf4176fe"),
"rev" : "A",
"quote" : "12345",
},
{
"_id" : ObjectId("58b6085617c2cd53cf417710"),
"rev" : "B",
"quote" : "12345",
},
{
"_id" : ObjectId("58b6da4617c2cd53cf417728"),
"rev" : "C",
"quote" : "12345",
},
{
"_id" : ObjectId("58b6e5c317c2cd53cf417744"),
"rev" : "D",
"quote" : "12345",
},
{
"_id" : ObjectId("58b6f44917c2cd53cf41776e"),
"rev" : "A",
"quote" : "54321",
},
{
"_id" : ObjectId("58b6ffcb17c2cd53cf417788"),
"rev" : "B",
"quote" : "54321",
}
答案 0 :(得分:0)
感谢@Veeram提供此解决方案。
db.myCollection.aggregate([{"$sort":{"quote":1, "rev":1 }}, { "$group": { "_id": "$quote", "data": { "$last":"$$ROOT"} } ])