MongoDB $group阶段合并数组字段异常的技术咨询
解决MongoDB $group中$push内数组拼接的问题
你遇到的核心问题是在同一个$push的对象结构里,无法引用同级刚生成的字段。MongoDB的字段表达式是并行计算的,不是按顺序执行的——当你写field2: { $concatArrays: ["$field1", myArray] }时,$field1还没被计算出来,所以只会得到myArray的内容。
这里有个直接可行的解决方案:用$let临时存储你通过$map生成的数组,然后在同一个上下文里复用这个变量来生成field1和field2:
$group: { _id: { /* 你的分组键 */ }, foo: { $push: { $let: { vars: { // 先计算map后的数组,存入临时变量 mappedTitles: { $map: { input: "myObjects", as: "obj", in: "$$obj.title" } } }, in: { field1: "$$mappedTitles", // 用临时变量和myArray完成拼接 field2: { $concatArrays: ["$$mappedTitles", myArray] } } } } } }
小提示:
- 如果
myArray是集合文档中的字段(而非字面量数组),记得要加$前缀,比如"$myArray",否则MongoDB会把它当成字面量解析。 $let的作用是在局部上下文定义变量,既可以复用计算结果避免重复运算,也完美解决了同级字段无法互相引用的问题。
内容的提问来源于stack exchange,提问作者renno
相关产品推荐
相关产品推荐

