现有一数据
"ps_chai_arr": [
{
"amount": 58.719999999999999,
"chai_id": "6751c21ece5ec9aad57d0b13"
},
{
"amount": 60.710000000000001,
"chai_id": "675e93293d029cf323b0c40c"
}
],
需要从另一个表sj-chai中读取chai_id对应在菜名, 然后把菜名加到对应的ps_chai_arr中
代码如下
.lookup({
from: 'sj-chai',
let: { chaiId: $.map({ input: '$ps_chai_arr', as: 'chai', in: '$$chai.chai_id' }) },
pipeline: $.pipeline()
.match(dbCmd.expr($.in(['$_id', '$$chaiId'])))
.project({ chai_name: 1 })
.done(),
as: 'chaiInfo'
})
.addFields({
ps_chai_arr: $.map({
input: '$ps_chai_arr',
as: 'chai',
in: $.mergeObjects([
'$$chai',
{
// 重点:提取 chai_name.chai_name 到 name 字段
chaiName: $.arrayElemAt([
$.filter({
input: '$chaiInfo',
as: 'info',
cond: $.eq(['$$info._id', '$$chai.chai_id'])
}),
0 // 取匹配到的第一个元素
]) // 直接获取 chai_name 值
}
])
})
})
得到的数据如下
"ps_chai_arr": [
{
"amount": 58.719999999999999,
"chaiName": {
"_id": "6751c21ece5ec9aad57d0b13",
"chai_name": "测试菜T02"
},
"chai_id": "6751c21ece5ec9aad57d0b13"
},
{
"amount": 60.710000000000001,
"chaiName": {
"_id": "675e93293d029cf323b0c40c",
"chai_name": "测试菜Z01"
},
"chai_id": "675e93293d029cf323b0c40c"
}
],
问题是只要我在$.arrayElemAt后面加.chai_name,是获取不到这个字段的
$.arrayElemAt([....................,0]) .chai_name
请问是不是BUG
0 个回复