2014-06-21 23 views
2

考虑以下设置的文件:MongoDB的查询组和独特的一起

[ 
    { 
    "name" : "nameA", 
    "class" : "classA", 
    "age" : 24, 
    "marks" : 45 
    }, 
    { 
    "name" : "nameB", 
    "class" : "classB", 
    "age" : 22, 
    "marks" : 65 
    }, 
    { 
    "name" : "nameC", 
    "class" : "classA", 
    "age" : 14, 
    "marks" : 55 
    } 
] 

我需要获取年龄和标记的最小值和最大值,以及对名称和类别的不同的值。

我知道我可以使用聚合和组来获取年龄和标记的最大值和最小值以及一个查询,并且我可以使用不同的查询来获取名称和类的不同值。

但我不想单独查询来获取该信息。有一种方法可以用一个查询得到结果吗?比方说,如果我可以以某种方式合并聚合和独特。

回答

2

当然,你可以用一个聚合命令来完成。您需要使用$group$addToSet操作:

db.collection.aggregate([{ 
    $group : { 
     _id : null, 
     name : { $addToSet : "$name" }, 
     class : { $addToSet : "$class" }, 
     ageMin : { $min : "$age" }, 
     ageMax : { $max : "$age" }, 
     marksMin : { $min : "$marks" }, 
     marksMax : { $max : "$marks" } 
    } 
}]); 

$addToSet将创建所选字段唯一值的数组。

这种聚合将返回你的榜样文档以下回应:

{ 
    "_id" : null, 
    "name" : [ 
     "nameC", 
     "nameB", 
     "nameA" 
    ], 
    "class" : [ 
     "classB", 
     "classA" 
    ], 
    "ageMin" : 14, 
    "ageMax" : 24, 
    "marksMin" : 45, 
    "marksMax" : 65 
}