MongoDB查询组和不同的一起

时间:2014-06-21 09:03:41

标签: mongodb mongoose sails-mongo

考虑以下文件:

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

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

我知道我可以使用aggregate和group来获取age和mark的最大值和最小值一个查询,并且我可以使用不同的查询获得名称和类的不同值。

但我不想单独查询来获取该信息。有没有办法可以通过一个查询获得结果?假设我能以某种方式合并聚合和区分。

1 个答案:

答案 0 :(得分:3)

当然,您可以使用一个聚合命令来完成。您需要将$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
}