如何合并不同字段的两个对象数组,将in_cart的amount插入details数组
MongoDB 合并in_cart与details数组字段实现方案
直接在$lookup关联查询的后续阶段加入$set(也可用$addFields)聚合阶段即可实现字段合并,具体代码如下:
{ $set: { details: { $map: { input: { $zip: { inputs: ["$in_cart", "$details"] } }, as: "itemPair", in: { $mergeObjects: [ { $arrayElemAt: ["$$itemPair", 1] }, { amount: { $arrayElemAt: ["$$itemPair", 0].amount } } ] } } } } }
逻辑说明
$zip操作会将in_cart和details两个数组按索引位置一一配对,生成二维数组,每个子项为[对应索引的in_cart元素, 对应索引的details元素]$map遍历配对后的二维数组,对每一组配对元素使用$mergeObjects合并,将in_cart中的amount字段写入对应details元素
处理后结果示例
"details":[ { "_id":"12345", "name":"test", "price":1110, "amount":2 // 其余原有字段保持不变 } ]
注意:该方案依赖两个数组索引位置完全对应的前提,如果你无法保证$lookup返回的details顺序和in_cart顺序一致,可以在合并前先对两个数组按product_id/_id做排序,保证对应关系正确。
内容的提问来源于stack exchange,提问作者Moris
相关产品推荐
相关产品推荐

