MongoDB同时查询外层和内嵌数组字段返回空如何修复?
错误原因
你原有的查询语句是要求column3字段完全等于你传入的{column31: "data312"}对象,匹配失败的核心原因有两个:
column3是数组类型,不是单个对象类型,你的写法没有匹配数组结构- 数组内的子对象还包含
column32字段,你传入的匹配对象缺少该字段,精确匹配自然返回空结果
修复方案
方案1:点号语法(单字段匹配场景,适配你当前需求)
直接通过数组名.内嵌字段名的语法匹配数组内的子字段,只要数组中存在至少一个子对象满足字段条件即可命中:
collection.find({ column1: "data11", "column3.column31": "data312" }).then((item)=>{ res.json(item); }).catch((err)=>{ console.log(err); });
方案2:$elemMatch操作符(多字段同子对象匹配场景)
如果你需要同时匹配同一个子对象的多个字段,就用$elemMatch操作符,示例如下:
collection.find({ column1: "data11", column3: { $elemMatch: { column31: "data312", // 可继续添加同一个子对象的其他匹配条件 column32: "data322" } } }).then((item)=>{ res.json(item); }).catch((err)=>{ console.log(err); });
内容的提问来源于stack exchange,提问作者Kavishka
相关产品推荐
相关产品推荐

