在我的MongoDB后端中,我想创建一个端点,该端点返回名为department
的属性的所有唯一值。现在,如果我在IntelliShell中执行此操作,则将执行以下操作:
db.staffmembers.distinct( "department" )
这将返回department
的所有值的数组。
但是如何在这样的Mongoose find()查询中返回所有唯一值?
Staffmember.find({ name: 'john', age: { $gte: 18 }});
换句话说,如果我想使用上面的find()
来返回“ staffmembers”集合中department
的所有唯一值,语法会是什么样?
答案 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?