У меня есть коллекция как этотMongoDB множественной группы по
{
customerid: '1'
date : "2017-01-20T14:56:59.301Z"
status: 'active'
}, {
customerid: '1'
date : "2017-01-20T16:56:59.301Z"
status: 'inactive'
}, {
customerid: '2'
date : "2017-01-20T12:56:59.301Z"
status: 'inactive'
}, {
customerid: '2'
date : "2017-01-20T13:56:59.301Z"
status: 'inactive'
}, {
customerid: '3'
date : "2017-01-20T12:56:59.301Z"
status: 'inactive'
}, {
customerid: '3'
date : "2017-01-20T22:56:59.301Z"
status: 'active'
}, {
customerid: '1'
date : "2017-01-22T22:56:59.301Z"
status: 'active'
}, {
customerid: '1'
date : "2017-01-21T19:56:59.301Z"
status: 'active'
}, {
customerid: '2'
date : "2017-01-21T17:56:59.301Z"
status: 'inactive'
}, {
customerid: '2'
date : "2017-01-21T18:56:59.301Z"
status: 'active'
}
Теперь я хочу, чтобы принести в день на одного клиента последнего статуса так для 2017-01-20
: я должен получить
{Customerid :1,status :"inactive",date : "2017-01-20T16:56:59.301Z" },
{Customerid :2,status :"inactive",date : "2017-01-20T13:56:59.301Z" },
{Customerid :3,status :"active" ,date : "2017-01-20T22:56:59.301Z"}
(последний статус на основе на дату каждый день) и т. д.
Пробовал запрос агрегации с группой, но не смог решить эту проблему.
<pre>
db.test.aggregate([
{$match : {
"updateddate" : { $gte: ISODate("2017-01-01T00:00:00.000Z"),$lt: ISODate("2017-01-01T23:59:59.000Z") }}},
{ $sort: { customerid: 1, updateddate: 1 } },
{ $group: {
_id: { customerid: '$customerid', year : { $year : "$updateddate" },
month : { $month : "$updateddate" },
day : { $dayOfMonth : "$updateddate" },status : "$status" }
}},
{ $group: {
_id: '$_id.status',
Count: { $sum: 1 }
}},
{ $project: {
_id: 0,
status: '$_id',
Count: 1
}}]
, function(err, result){
console.log(result);
}
);
добавлен мой запрос. Просто пытаюсь получить данные между датами. Даты будут динамичными, так как они будут получены из пользовательского интерфейса. – MKS