【问题标题】:Mongoose aggregation sort dynamicallyMongoose 聚合动态排序
【发布时间】:2016-11-17 16:41:48
【问题描述】:

我想通过示例 avgTemperature 或 avgNoise 进行动态排序,但我无法做到 var sort = 'avgTemperature'; 并在聚合中获取它。有人有提示吗?

这是静态聚合代码,它仅按 avgTemperature 排序。但我想动态改变。

 Measurement.aggregate([{
      $group: {
        _id: "$workplace",
        avgTemperature: {
          $avg: "$temperature"
        },
        avgNoise: {
          $avg: "$noise"
        }
      }
    }, {
      $sort: {
        avgTemperature: 1
      }
    }]);

【问题讨论】:

    标签: node.js mongodb sorting mongoose aggregation-framework


    【解决方案1】:

    考虑从动态查询创建一个文档(或 JS 对象)来表示 $sort 运算符表达式。您可以使用square bracket notation 来构造它。

    举个例子:

    var sortOperator = { "$sort": { } },
        groupOperator = {
            "$group": {
                "_id": "$workplace",
                "avgTemperature": { "$avg": "$temperature" },
                "avgNoise": { "$avg": "$noise" }
            }
        },
        sort = "avgTemperature"; // <-- dynamic query
    
    sortOperator["$sort"][sort] = 1; // <-- create sort operator using bracket notation
    Measurement.aggregate([ groupOperator, sortOperator ])
               .exec(callback);
    

    【讨论】:

      猜你喜欢
      • 2018-05-10
      • 2014-12-24
      • 2020-04-23
      • 2017-04-10
      • 2021-07-21
      • 2017-01-05
      • 2019-08-01
      • 1970-01-01
      • 2015-01-23
      相关资源
      最近更新 更多