2015-12-31 3 views
-1

Здравствуйте, я хочу считать зону обзора документа, поле «SENDTIME» в массиве документов и условиеMongoDB документ счетчик массива поле с агрегатным

$and:[sendTime:{$gte:startTime},sendTime:{$lte:endTime}] 

моих документы выглядят как этот

{ 
    _id:ObjectId("5663c7d23d2a580bac21091b"), 
    message:[ 
     { 
      msg:"1", 
      sendTime:ISODate("2015-12-08T09:34:53.128Z") 
     }, 
     { 
      msg:"2", 
      sendTime:ISODate("2015-12-09T09:34:53.128Z") 
     } 
     .... 
    ] 
}, 
{ 
    _id:ObjectId("5663c7d23d2a580bac210912"), 
    message:[ 
     { 
      msg:"aaa", 
      sendTime:ISODate("2015-12-06T09:34:53.128Z") 
     }, 
     { 
      msg:"bbb", 
      sendTime:ISODate("2015-12-08T09:34:53.128Z") 
     } 
     .... 
    ] 
} 

Я изучаю метод из другого вопроса для подсчета поля.

db.chat.find().map(function(room){ 
    room.message.map(function(msg){ 
     if(msg.sendTime >= startTime&&msg.sendTime<=endTime) 
      queryTotalMsg++; 
    }); 
}); 

Я пытаюсь использовать агрегат, чтобы сделать то же самое

db.chat.aggregate([ 
        $project:{ 
         message:"$message.sendTime"     
        } 
       ]); 

, но я не знаю, как я могу рассчитывать SENDTIME с условием

Я не знаю, агрегат можно использовать для этот вопрос.

Спасибо за любой ответ.

+0

HTTPS://docs.mongodb.org/v3.0/reference/operator/aggregation/group/ Отправлено –

+0

@RahulChanglani yes Я пытаюсь использовать $ group для этого, но я понятия не имею, как сгруппировать, тогда я могу рассчитывать с условием – thiefjim

+0

Использовать счетчик: {$ sum: 1} в $ group и поставить условие $ lte/$ gte на startTime/endTime в $ project для sendTime. –

ответ

0

поставить условие в $ матча и в зависимости, если вы хотите, чтобы сосчитать все документы массива в целом, может быть, попробовать $ раскрутить, как ..

db.chat.aggregate({$unwind: "$message" }, {$match: {condition}}, {$group: {_id: 1, count: { $sum: 1}}}); 

ссылка матч: https://docs.mongodb.org/v3.0/reference/operator/aggregation/match/

+0

Спасибо, я получил тот же счет с функцией карты! – thiefjim

Смежные вопросы