猫鼬查询以查找唯一值

时间:2018-10-01 19:02:44

标签: mongodb mongoose aggregation-framework

在我的MongoDB后端中,我想创建一个端点,该端点返回名为department的属性的所有唯一值。现在,如果我在IntelliShell中执行此操作,则将执行以下操作:

db.staffmembers.distinct( "department" )

这将返回department的所有值的数组。

但是如何在这样的Mongoose find()查询中返回所有唯一值?

Staffmember.find({ name: 'john', age: { $gte: 18 }});

换句话说,如果我想使用上面的find()来返回“ staffmembers”集合中department的所有唯一值,语法会是什么样?

2 个答案:

答案 0 :(得分:1)

您可以使用.aggregate()并将条件传递到$match阶段,然后在$addToSet中使用$group来获取唯一值。

let result = await Staffmember.aggregate([
    { $match: { name: 'john', age: { $gte: 18 }} },
    { $group: { _id: null, departments: { $addToSet: "$department" } } }
]);

答案 1 :(得分:0)

在上述情况下,我们可以像这样使用find和distinct。总计可能有点过大。我已经尝试了以下两种解决方案。

Staffmember.find({name: 'john', age: {$gte: 18}}).distinct('department', 
   function(error, departments) {
       // departments is an array of all unique department names
   }
);

Staffmember.distinct('department', {name:'john', age:{ $gte: 18 }},
   function(error, departments) {
       // departments is an array of all unique department names
   }
);

此链接仅以各种可能性提供帮助: How do I query for distinct values in Mongoose?