MongoDb:分组然后排序并获取最后一个文档

时间:2017-10-10 17:05:28

标签: node.js mongodb mongoose

我有一系列文件。每个文件都有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",
}

1 个答案:

答案 0 :(得分:0)

感谢@Veeram提供此解决方案。

db.myCollection.aggregate([{"$sort":{"quote":1, "rev":1 }}, { "$group": { "_id": "$quote", "data": { "$last":"$$ROOT"} } ])