用户架构(猫鼬):
{
"name": String,
...
}
我需要计算所有不同的 name
,而不要将它们作为列表请求,例如distinct
方法(收集太大) ,会影响记忆力。)
我尝试过以下操作:
User
.distinct('name')
.count()
.exec();
然而,count
方法似乎覆盖了不同的过滤器,返回了User集合中所有对象的计数。
在有限的内存环境中计算MongoDB集合属性的不同值的有效方法是什么?
答案 0 :(得分:2)
您可以使用以下聚合实现此目的:
User.aggregate([
{ $group: { _id: null, names:{$addToSet:"$name"} } },
{ $project: { count: { $size: "$names" } } }
])
.exec(function(err, users){
console.log(users.count)
})
在$group
聚合内,$addToSet
运算符会在names
数组中添加每个唯一名称。在$project
聚合中,我们会按names
运算符计算数组$size
的大小,并将该值分配给count
属性。