我想按示例 avgTemperature 或 avgNoise 动态排序,但我无法var sort = 'avgTemperature';
并在聚合中获取它。有人有提示吗?
这是静态聚合代码,它仅按 avgTemperature 排序。但我想动态改变。
Measurement.aggregate([{
$group: {
_id: "$workplace",
avgTemperature: {
$avg: "$temperature"
},
avgNoise: {
$avg: "$noise"
}
}
}, {
$sort: {
avgTemperature: 1
}
}]);
考虑从动态查询创建一个文档(或 JS 对象)来表示$sort
运算符表达式。您可以使用方括号表示法来构造它。
举个例子:
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);