MongoDB聚合Match查询返回空数组问题求助(Node.js+Express)
问题解决:MongoDB聚合$match嵌套字段筛选失败
问题原因
你当前的$match条件使用了完整嵌套对象匹配,MongoDB会要求整个user_form.user_details对象和你指定的结构完全一致(包括last_name字段),但你的数据中每个用户的last_name都不同,所以无法匹配到任何数据。
解决方法
使用点符号直接指定嵌套字段路径,而不是嵌套对象的形式,这样只会匹配目标字段的值,忽略其他嵌套字段。
修改后的聚合查询代码:
User.aggregate([ { $match: { "user_form.user_details.first_name": req.body.user_form.user_details.first_name } } ]).exec(function(err, filteredUsers) { if (filteredUsers) { console.log(filteredUsers); res.json({ "msg": "Successfully gets the filtered users", "data": filteredUsers, "success": true }); } if (err) { res.json({ "msg": "Error occured while filtering users", "error": err, "success": false }); } })
补充说明
- 当需要匹配嵌套文档中的单个字段时,必须使用点符号(
"parent.child.grandchild")来定位字段 - 如果确实需要匹配完整的嵌套对象结构,确保你的查询条件包含所有字段且值完全一致,但这种场景在实际开发中很少见
内容的提问来源于stack exchange,提问作者user20578603
相关产品推荐
相关产品推荐

