У меня следующий результат после использования поиска агрегации среди трех коллекций.
[{
_id : "henten",
location: "some place",
devices: [
{"d_id": 'd0001',
"z_id": 'z2001'},
{"d_id": 'd0002',
"z_id": 'z2002'}
],
store: [
{"z_name" : 'vera',
"z_id" : 'z2001'},
{"z_name" : 'ghora',
"z_id" : 'z2002'}
]
}]
Мне нужно передать значение 'd_id' в словари 'store' как массив в новое поле с именем'DID', если devices.z_id совпадает с store.z_id.
Я пробовал следующее:
{
$addFields: {
"store.DID" :
{$filter: {
input: "$devices.d_id",
as: 'did',
cond: {$eq: ['$devices.z_id', '$store.z_id']}
}}
}}
Я также пробовал $ redact и $ arrayElemAt, которые дают мне те же неверные результатыследующим образом:
[{
_id : "henten",
location: "some place",
devices: [
{"d_id": 'd0001',
"z_id": 'z2001'},
{"d_id": 'd0002',
"z_id": 'z2002'}
],
store: [
{"z_name" : 'vera',
"z_id" : 'z2001',
"DID" : ['d0001', 'd0002']},
{"z_name" : 'ghora',
"z_id" : 'z2002',
"DID" : ['d0001', 'd0002']}
]
}]
В то время как правильный ответ должен быть:
[{
_id : "henten",
location: "some place",
devices: [
{"d_id": 'd0001',
"z_id": 'z2001'},
{"d_id": 'd0002',
"z_id": 'z2002'}
],
store: [
{"z_name" : 'vera',
"z_id" : 'z2001',
"DID" : ['d0001']},
{"z_name" : 'ghora',
"z_id" : 'z2002',
"DID" : ['d0002']}
]
}]
Как мне подойти к этому?Один z_id может иметь два разных d_id и поэтому должен иметь эти два d_id внутри массива DID.