假设这是输入JSON数据和集合名称。
[
{
"time": ISODate("2016-11-27T011:43:01.000+05:30"), 'userId': 'abc'
},
{
"time": ISODate("2016-11-28T01:43:01.000+05:30"),'userId': 'pqr'
},
{
"time": ISODate("2016-11-27T08:43:01.000+05:30"), 'userId': 'abc'
},
{
"time": ISODate("2016-11-27T02:43:01.000+05:30"), 'userId': 'abc'
},
{
"time": ISODate("2016-11-27T011:43:01.000+05:30"), 'userId': 'pqr'
},
{
"time": ISODate("2016-11-28T011:43:01.000+05:30"), 'userId': 'abc'
}
]
在上面给出的JSON数据中,我们维护了用户登录集合。我们必须在用户首次记录与日期对应的数据时找出数据。我们必须对这个json数据执行操作,以便输出应该采用这种格式。
输出
[{"date": "2016-11-27",
'user': [{'userId':'abc','time': ISODate("2016-11-27T08:43:01.000+05:30")},
'userId':'pqr','time': ISODate("2016-11-27T11:43:01.000+05:30")]
},
{"date": "2016-11-28",
'user': [{'userId':'abc','time': ISODate("2016-11-28T11:43:01.000+05:30")},
'userId':'pqr','time': ISODate("2016-11-28T1:43:01.000+05:30")]
}]
答案 0 :(得分:1)
您可以尝试以下聚合查询。
db.collection_name.aggregate([
{
"$sort": {
"userId": 1,
"time": -1
}
},
{
"$group": {
"_id": {
"date": {
"$dateToString": {
"format": "%Y-%m-%d",
"date": "$time"
}
},
"userId": "$userId"
},
"time": {
"$first": "$time"
}
}
},
{
"$group": {
"_id": "$_id.date",
"user": {
"$push": {
"userId": "$_id.userId",
"time": "$time"
}
}
}
},
{
"$sort": {
"_id": 1
}
}
])