2014-11-08 2 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 
} 
] 

을하지만, 나 또한 저를 반환하려면 내가 필요로하지 않는/그룹 절에서 그들과 같은 몇 가지 다른 필드는 다음과 같습니다. available, price ...

몽구스 문서 읽기이 문제에 대해 $ project를 사용해야 함을 이해합니다.

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

지금은 단지 빈 결과를 얻을 ... 나는 같은 $ 그룹의 원인이 무엇인가에 추가하는 시도를 : 같은 omething

가격 : '$ 가격'내가 얻을 수없는 성공 : "예외 : 그룹 집계 필드 '가격'은 객체 내부의 표현식으로 정의해야합니다. ','성공하지 않고 오류를 고글 처리했습니다. 어떻게해야합니까? '

답변

1

당신은 $group에 추가,하지만 당신은 _id (roomId)를 하나의 값으로 감소 할 당 당신은 여러 값을 방법을 결정하는 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