通过字段的最大值获取不同的文档

时间:2017-06-28 14:58:04

标签: mongodb mongodb-query aggregation-framework

我有一个要求,我应该在两个字段中查询,其中一个是唯一字段,一个是最大字段。  这是我的样本集

 {
    "_id": ObjectId('59537b7fe08062b9ee8dfdf6'),
    "admin": {
        "model": "abc",
        "version": "00",
        "name":"john",
        "age":"30"
    }
}
{
    "_id": ObjectId('59537b7fe08062b9ee8dfdf7'),
    "admin": {
        "model": "abc",
        "version": "01" ,
        "name":"john",
        "age":"30"
    }
}
{
    "_id": ObjectId('59537b7fe08062b9ee8dfdf8'),
    "admin": {
        "model": "def",
        "version": "00" ,
        "name":"cena",
        "age":"30"
    }
}

我有两个不同版本的相同型号。我想查询最大版本的型号。我试过简单地排序它不适合我的版本。 我期待像这样的输出

{
    "_id": ObjectId('59537b7fe08062b9ee8dfdf7'),
    "admin": {
        "model": "abc",
        "version": "01" ,
        "name":"john",
        "age":"30"
    }
}
{
    "_id": ObjectId('59537b7fe08062b9ee8dfdf8'),
    "admin": {
        "model": "def",
        "version": "00" ,
        "name":"cena",
        "age":"30"
    }
} 

任何建议都会非常有用。

1 个答案:

答案 0 :(得分:1)

正如Neil所说,它是$ sort,$ group和$ replaceRoot,但在查询中有正确的值:

db.collection.aggregate([
  { "$sort": { "admin.version": -1 } },
  { "$group": {
    "_id": "$admin.model" ,
    "admin": { "$first": "$$ROOT" }
  }},
  { "$replaceRoot": { "newRoot": "$admin" } }
])