2014-11-08 98 views
0
其餘

您好,我有以下代碼現在的工作:貓鼬羣聚集不回場

app.get('/api/checkAv/:checkIn/:checkOut', function(req, res) { 
    var checkIn = req.params.checkIn, 
     checkOut = req.params.checkOut, 
     roomType = req.params.roomType, 
     startDate = moment(checkIn), 
     endDate = moment(checkOut), 
     nights = endDate.diff(startDate, 'days'); 
      model.Av.aggregate([ 
       {$match: {dateOfDay: {$gte: new Date(checkIn), $lt:new Date(checkOut)} }}, 
       {$group: { 
        _id: '$roomId', 
        total: {$sum: '$price'}, 
        count: {$sum: 1}, 
        avg: {$avg: '$price'} 
       }}, 
       { $match: { count: { $gte: nights } } } 
       ], function (err, result) { 
      if (err) 
       res.send(err); 

      res.json(result); 

     }); 
}); 

還給我一樣的東西:

[ 
{ 
"_id": "545b4848344044fa3ec9ac74", 
"total": 180, 
"count": 2, 
"avg": 90 
} 
] 

,但我想我回報也一些其他領域從集合,我不需要/有他們在小組條款例如:可用,價格...

閱讀Mongoose文檔我明白我需要使用$項目的這個問題,所以我添加了s omething像:

{$project: {price: "$price"}} 

,現在我得到的只是空的結果...我在$組原因類似嘗試添加:

價格:「$價格」沒有成功,我得到:「例外:組合字段「價格」必須定義爲一個對象內的表達式「,我忽略了錯誤而沒有成功,我應該如何實現這一目標?

回答

1

您將它們添加到$group,但你需要使用決定要如何多值每_idroomId)降低到一個值accumulator operators之一。

如果您考慮一下,只需添加price: "$price"就沒有意義了,您希望它使用哪種價格值?

所以它需要是這樣的:

price: {$first: '$price'} // To use the first price for this roomId (be sure to sort) 

price: {$push: '$price'} // To put all of the prices for this roomId into an array 

price: [$max: '$price'} // To use the maximum of all the prices for this roomId 

等等...希望你的想法。

+0

謝謝你的價格:{$ first:'$ price'}是我一直在尋找 – Teodor 2014-11-08 18:17:25