У меня есть следующий запрос:
db.test.aggregate([
{
$match: {
'type': 'energy'
}
},
{
$limit: 10000
},
{
$addFields: {
day: {
$dateToString: {
date: "$when.date",
format: "%d/%m/%Y"
}
},
sensor: "$id"
},
},
{
$project: {
_id: 1,
sensor: 1,
when: 1,
value: 1,
day: 1
}
},
{
$group: {
_id: "$day",
data: {
$push: "$$ROOT"
},
}
},
{
$sort: {
'data': 1
}
}
])
, который возвращает этот формат данных:
{
"_id" : "05/04/2018",
"data" : [
{
"_id" : ObjectId("5ac66be9b02d5c18fd4106c7"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-05T13:53:22.703-03:00"),
"unix" : 1522947202,
"milli" : 1522947202703
},
"day" : "05/04/2018",
"sensor" : "sen3"
},
{
"_id" : ObjectId("5ac66be9b02d5c18fd4106c8"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-05T13:53:22.705-03:00"),
"unix" : 1522947202,
"milli" : 1522947202705
},
"day" : "05/04/2018",
"sensor" : "sen4"
}
]
},
{
"_id" : "06/04/2018",
"data" : [
{
"_id" : ObjectId("5ac7e5d2efe88a4e76c008d2"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-06T18:25:38.885-03:00"),
"unix" : 1523049938,
"milli" : 1523049938885
},
"day" : "06/04/2018",
"sensor" : "sen3"
},
{
"_id" : ObjectId("5ac7e5e4efe88a4e76c008d5"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-06T18:25:56.105-03:00"),
"unix" : 1523049956,
"milli" : 1523049956105
},
"day" : "06/04/2018",
"sensor" : "sen3"
}
]
},</p>
<p>...
Обратите внимание, что у нас есть в каждом документе «данных»,различные типы датчиков (sen3, sen4, ..., senN).
Я пытаюсь агрегировать этот результат еще раз, объединяя данные по датчику, чтобы получить вывод примерно так:
{
"_id" : "05/04/2018",
"sen3" : [
{
"_id" : ObjectId("5ac66be9b02d5c18fd4106c7"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-05T13:53:22.703-03:00"),
"unix" : 1522947202,
"milli" : 1522947202703
},
"day" : "05/04/2018",
"sensor" : "sen3"
},
{
"_id" : ObjectId("5ac66be9b02d5c18fd4106c7"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-05T13:53:22.703-03:00"),
"unix" : 1522947202,
"milli" : 1522947202703
},
"day" : "05/04/2018",
"sensor" : "sen3"
}
],
"sen4" : [
{
"_id" : ObjectId("5ac66be9b02d5c18fd4106c8"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-05T13:53:22.705-03:00"),
"unix" : 1522947202,
"milli" : 1522947202705
},
"day" : "05/04/2018",
"sensor" : "sen4"
},
{
"_id" : ObjectId("5ac66be9b02d5c18fd4106c8"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-05T13:53:22.705-03:00"),
"unix" : 1522947202,
"milli" : 1522947202705
},
"day" : "05/04/2018",
"sensor" : "sen4"
}
]
},
{
"_id" : "06/04/2018",
"sen3" : [
{
"_id" : ObjectId("5ac7e5d2efe88a4e76c008d2"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-06T18:25:38.885-03:00"),
"unix" : 1523049938,
"milli" : 1523049938885
},
"day" : "06/04/2018",
"sensor" : "sen3"
},
{
"_id" : ObjectId("5ac7e5e4efe88a4e76c008d5"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-06T18:25:56.105-03:00"),
"unix" : 1523049956,
"milli" : 1523049956105
},
"day" : "06/04/2018",
"sensor" : "sen3"
}
],
"sen4": [
{
"_id" : ObjectId("5ac7e7a7efe88a4e76c008de"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-06T18:33:27.365-03:00"),
"unix" : 1523050407,
"milli" : 1523050407365
},
"day" : "06/04/2018",
"sensor" : "sen4"
},
{
"_id" : ObjectId("5ac7e7a7efe88a4e76c008de"),
"value" : 0,
"when" : {
"date" : ISODate("2018-04-06T18:33:27.365-03:00"),
"unix" : 1523050407,
"milli" : 1523050407365
},
"day" : "06/04/2018",
"sensor" : "sen4"
}
]
}
Короче: Iхочу сгруппировать данные по дням , датчикам и внутри каждого датчика результатов, относящихся к этому дню и датчику.
Япытается создать вложенный $group
, но во всех случаях это не так.
Можно ли это сделать, и если да, то как?