2017-09-21 129 views
0

假設這是一個輸入JSON數據並且集合名稱是放置的。如何在JSON數據中使用mongoDB的聚合操作

[ 
    { 
     "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

@Guys!請不要關注日期格式。您可以以任何格式打印 –

回答

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 
    } 
    } 
])