2016-07-14 96 views
1

我想動態排序示例avgTemperature或avgNoise,但我不能做var sort = 'avgTemperature';並得到它在聚合。有人有提示嗎?貓鼬聚合動態排序

這是靜態聚合代碼,它只能通過avgTemperature進行排序。但我想動態改變。

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

回答

0

考慮從動態查詢在創建文檔(或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);