Mongoose查询嵌套数组元素:查找tachancka联系人中username为erick的记录
问题根因
你之前的两种写法都遗漏了对主文档username等于tachancka的过滤条件,只会返回任意包含联系人用户名为erick的用户文档,无法精准定位到你要查询的目标用户。
正确实现方案
1. 需获取匹配的用户完整文档
如果需要返回符合条件的tachancka用户完整数据,写法如下:
User.findOne({ username: 'tachancka', 'contacts.username': 'erick' })
返回结果非null则代表tachancka的联系人列表中存在erick,反之则不存在。
2. 仅需判断存在性(性能更优)
如果不需要返回文档内容,仅判断是否存在,建议使用countDocuments减少数据传输开销:
const hasErick = await User.countDocuments({ username: 'tachancka', 'contacts.username': 'erick' }) > 0
返回的hasErick为布尔值,true代表存在,false代表不存在。
补充说明
如果你的联系人匹配逻辑需要同时满足多个字段的条件(比如同时匹配username为erick且_id为指定值),才需要使用$elemMatch操作符,单个字段匹配直接使用点语法即可。
内容的提问来源于stack exchange,提问作者Gabriel Caramés
相关产品推荐
相关产品推荐

