如何查询MongoDB文档并提取指定语言的本地化字段?
你的聚合管道是可行的
你提供的聚合管道完全能实现预期需求:
- 先用
$match过滤出key=123的目标文档 - 通过
$replaceRoot结合$mergeObjects,把原文档所有字段与translations.en内的字段合并到根层级 - 最后用
$project移除不需要的translations字段
执行后会得到你想要的文档结构。
更简洁的实现方式
可以用$set+$unset的组合简化管道,步骤更少且逻辑更直观:
db.characters.aggregate([ { $match: { "key": 123 } }, { $set: "$translations.en" }, { $unset: "translations" } ])
$set会直接将translations.en里的所有字段(比如name、description)展开到根文档层级- 再用
$unset移除冗余的translations字段,一步到位得到目标结构
如果你的MongoDB版本是4.2及以上,还可以用$replaceWith进一步压缩成两步:
db.characters.aggregate([ { $match: { "key": 123 } }, { $replaceWith: { $mergeObjects: [ { $unset: ["$$ROOT.translations"] }, "$translations.en" ] } } ])
$replaceWith是$replaceRoot的简化语法,这里先通过$unset移除原文档的translations字段,再和指定语言的翻译字段合并,直接生成新的根文档。
内容的提问来源于stack exchange,提问作者Justin Thomas
相关产品推荐
相关产品推荐

