Mongoose查询对象数组返回全部文档,同语句在MongoDB Compass正常如何解决?
问题原因及修复方案
1. 语法错误修正
你最初使用$elemMatch的写法多写了一个$符号,错误的$$elemMatch属于非法查询条件,会导致查询条件失效,返回全部文档。正确的$elemMatch查询写法如下:
User.find({ personalities: { $elemMatch: { personalName: "something" } } }) .then(users => res.status(200).send(JSON.stringify(users))) .catch(err => res.status(400).send(err))
2. 校验Mongoose Schema定义
这是最常见的导致查询失效的原因:如果你的User模型Schema定义和实际存储的文档结构不匹配,Mongoose会默认忽略未在Schema中声明的字段查询条件,导致查询条件等效于{},返回所有文档。
请确保你的Schema定义和实际结构一致,参考示例:
const mongoose = require('mongoose') const userSchema = new mongoose.Schema({ personalities: [ { personalName: String, color: Number, total: Number, userId: String } ] }) const User = mongoose.model('User', userSchema)
3. 点查询语法验证
你使用的{"personalities.personalName":"something"}写法本身符合MongoDB语法规范,和单条件$elemMatch的查询效果完全一致,只要Schema定义正确,该写法可以正常返回匹配结果。
如果确认Schema定义正确后查询仍然异常,可以在查询前添加打印语句确认查询条件是否存在参数注入、拼写错误等问题。
内容的提问来源于stack exchange,提问作者Lộc Trần Phước
相关产品推荐
相关产品推荐

