如何通过Mongoose聚合从嵌套对象提取字段值并解决报错
解决Mongoose聚合查询中提取嵌套字段的报错问题
我来帮你快速搞定这个问题!你遇到的报错根源在于**$project阶段里translation字段的路径写法错误**,MongoDB无法识别$.ru这种不完整的引用路径。
问题分析
你的原始数据里,translation是一个嵌套对象({ ru: 'asdf' }),要把其中的ru字段值提取出来作为顶层的translation字段,必须使用完整的嵌套字段路径,也就是$translation.ru,而不是你写的$.ru。
修正后的聚合查询语句
把$project里的translation字段路径修正后,就能得到你期望的结果了:
await LessonPhrase.aggregate([ { $match: { lessonId } }, { $project: { _id: '$_id', origin: 1, translation: '$translation.ru' } } ]);
额外优化(可选)
如果你的数据中可能存在translation.ru字段缺失的情况,可以用$ifNull来处理空值,避免返回null:
await LessonPhrase.aggregate([ { $match: { lessonId } }, { $project: { _id: '$_id', origin: 1, translation: { $ifNull: ['$translation.ru', ''] } // 缺失时返回空字符串 } } ]);
执行修正后的查询后,就能得到你想要的结果:
[ { origin: 'asdf', translation: 'asdf', _id: '215efb05-eb01-4376-8da2-8d8960a0e46d' } ]
内容的提问来源于stack exchange,提问作者pshx
相关产品推荐
相关产品推荐

