MongoDB中如何为嵌套数组元素投影自定义字段名
问题原因
你当前写法的问题在于,$project阶段中直接对comments字段指定id: '$_id'时,$_id的作用域是外层的用户文档,所以会统一读取用户的_id赋值给所有评论的id字段。要处理数组内的每个子文档,需要通过$map运算符遍历评论数组,单独转换每个评论对象的字段。
正确查询语句
db.users.aggregate([ { $project: { _id: 0, id: '$_id', name: 1, comments: { $map: { input: '$comments', as: 'currentComment', in: { id: '$$currentComment._id', content: '$$currentComment.content', post: '$$currentComment.post' // 如果不需要保留post字段可以删除该行 } } } } } ])
执行结果
运行上述语句后会得到期望的返回:
[ { "id": 1, "name": "John Doe", "comments": [ { "id": 100, "content": "Comment 100", "post": "1000" }, { "id": 101, "content": "Comment 101", "post": "1000" } ] } ]
内容的提问来源于stack exchange,提问作者Saeid Asadi
相关产品推荐
相关产品推荐

