【问题标题】:Mongoose Query to Find Unique ValuesMongoose 查询以查找唯一值
【发布时间】:2019-03-06 22:18:50
【问题描述】:

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

db.staffmembers.distinct( "department" )

这将返回一个包含department 的所有值的数组。

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

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

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

【问题讨论】:

标签: mongodb mongoose aggregation-framework


【解决方案1】:

对于上述场景,我们可以像这样使用 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?

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      相关资源
      最近更新 更多