MongoDB查询使用别名返回双数组,如何调整得到预期返回结构
问题原因
你之前的查询结果不符合预期有两个核心问题:
user是数组类型,直接使用$user.data_alias取值会返回由所有数组元素的data_alias字段组成的数组,而不是单个字符串值- 投影参数没有指定返回
name字段,所以结果中没有携带name值 - 注意你之前的聚合语句里集合名写成了
colls,如果实际集合名是coll记得修正,避免查询报错
解决方案
如果你确定user数组永远只有1个元素,直接在聚合的投影阶段用$first提取数组的第一个值即可,正确查询语句如下:
db.coll.aggregate([ { $match: { "id": "1" } }, { $project: { "_id": 0, "name": 1, "data": { $first: "$user.data_alias" } } } ])
如果你的MongoDB版本低于4.4,不支持$first操作符,可以替换为$arrayElemAt实现相同效果:
"data": { $arrayElemAt: [ "$user.data_alias", 0 ] }
执行上述查询后就会得到你期望的返回结构:
{ "data": "ex", "name": "sample" }
内容的提问来源于stack exchange,提问作者Soham
相关产品推荐
相关产品推荐

