在三个集合之间使用聚合查找后,得到以下结果。
[{
_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'}
]
}]
如果devices.z_id与store.z_id匹配,我需要将“ d_id”的值作为数组推到“ store”的字典中,并命名为“ DID”。
我尝试了以下方法:
{
$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,因此应在DID数组中具有这两个d_id。
db.col.aggregate([
{
$addFields: {
store: {
$map: {
input: "$store",
as: "s",
in: {
z_name: "$$s.z_name",
z_id: "$$s.z_id",
DID: {
$map: {
input: {
$filter: {
input: "$devices",
as: "d",
cond: { $eq: [ "$$d.z_id", "$$s.z_id" ] }
}
},
as: "filtered",
in: "$$filtered.d_id"
}
}
}
}
}
}
}
])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句