我有这样的数据集
{name: john,
age:20,
....
}
{name: sally,
age: 40
...
}
{name: sally,
age: 50
...
}
我可以发出什么mongo查询来获取“name”的每个唯一值。所以简单地说它会返回'john'和'sally'
答案 0 :(得分:2)
获取" name"的所有独特价值的最简单方法是通过在集合上使用 distinct()
方法,该方法将在单个集合中查询指定字段的不同值,并在数组中返回结果。因此将其用作
var distinctNames = db.collection.distinct("name");
printjson(distinctNames);
示例输出:
[ "sally", "john" ]
然后另一种方式,虽然不像上面那么简单和直接,但是使用聚合框架,您可以使用 $group
管道阶段按名称键对文档进行分组。向下一阶段输出每个不同分组的文档。
从 cursor
方法返回 aggregate()
后,您可以使用 map()
创建所需最终数组的方法。以下mongo shell演示描述了上述概念:
var distinctNames = db.collection.aggregate([
{
"$group": {
"_id": "$name"
}
}
]).map(function (r){ return r._id; });
printjson(distinctNames);
示例输出:
[ "sally", "john" ]