如何在MongoDB aggregate查询中向数组插入静态元素后展开
你之前的查询问题出在$group阶段:该操作会直接覆盖原有shops数组的内容,同时丢失原文档的_id、key等字段,无法得到预期结果。
正确的做法是通过$concatArrays操作符直接给原shops数组追加静态元素,不需要使用$group,修改后的聚合语句如下:
db.collection.aggregate([ { "$match": {"key": "key1"} }, { "$addFields": { "shops": { "$concatArrays": [ "$shops", [{"shopId": "S3", "ShopName": "SN3"}] ] } } }, { "$unwind": {"path": "$shops"} } ])
如果你使用的是MongoDB 4.2及以上版本,也可以把$addFields替换为等效的$set别名,写法保持一致即可。
逻辑说明:
$match阶段保留你原有逻辑,过滤出key为key1的目标文档$addFields阶段不会删除原有字段,仅更新指定的shops字段:通过$concatArrays将原有shops数组和包含新静态元素的数组进行合并,实现元素追加效果- 最后
$unwind拆分更新后的shops数组,即可得到3条拆分结果,原文档的_id、key等字段也会完整保留,完全匹配你需要的输出格式。
内容的提问来源于stack exchange,提问作者Nani
相关产品推荐
相关产品推荐

