经过一些研究后,我已经看到了通过mongoDB的$ mapReduce功能解决这个问题的方法,但是我还没有设法让它工作。这就是我正在处理的事情:
[
{
_id: '1',
device_id: 'ML39A-341D4-UI041',
date: '2018-03-28T00:00:00.000Z'
},
{
_id: '2',
device_id: 'ML39A-341D4-UI041',
date: '2018-03-29T00:00:00.000Z'
},
{
_id: '3',
device_id: 'D4YK2-R2D20-KYPI9'
date: '2018-04-01T00:00:00.000Z'
}
]
聚合后的预期结果应如下所示:
[
{
'ML39A-341D4-UI041': [
'2018-03-28T00:00:00.000Z',
'2018-03-29T00:00:00.000Z'
]
},
{
'D4YK2-R2D20-KYPI9': [
'2018-04-01T00:00:00.000Z'
]
}
]
答案 0 :(得分:1)
您可以使用聚合框架使用 $group
按device_id
对文档进行分组,然后使用 arrayToObject
来实现此目的得到一个值作为关键:
查询如下所示:
db.collection.aggregate([{
"$group": {
"_id": "$device_id",
"dt": {
"$push": "$date"
}
}
}, {
"$replaceRoot": {
"newRoot": {
"$arrayToObject": {
"$concatArrays": [
[{
"k": "$_id",
"v": "$dt"
}]
]
}
}
}
}])
结果:
[
{
"D4YK2-R2D20-KYPI9": [
"2018-04-01T00:00:00.000Z"
]
},
{
"ML39A-341D4-UI041": [
"2018-03-28T00:00:00.000Z",
"2018-03-29T00:00:00.000Z"
]
}
]
你可以在这里试试:mongoplayground.net/p/t9AjMA0nXCn