Node Express+Mongo开发API查询MongoDB返回空结果集问题咨询
问题原因及解决方案
你遇到的查询返回空数组的问题,大概率是以下几个原因导致的,按优先级逐一排查即可:
- Mongoose集合自动命名不匹配
Mongoose在使用mongoose.model()定义模型时,默认会将模型名转为小写复数,去匹配数据库中的集合名。你当前定义的模型名为user,默认会匹配users集合,如果你手动录入数据时创建的集合名不是users,就会查询不到数据。
解决方法:在定义Schema时手动指定集合名,修改user.model.js的Schema配置即可:
var schema = mongoose.Schema( { firstName: String, lastName: String, password: String, email:String, isAdmin:Boolean }, { timestamps: true, collection: "你实际存储数据的集合名" // 手动指定集合名,避免自动转换 } );
- 查询条件类型不匹配
你的查询条件是{isAdmin: false},要求匹配布尔类型的false值。如果你手动录入数据时,把isAdmin字段存成了字符串"false"或者数字0,Mongoose会严格校验类型,导致匹配不到数据。
解决方法:先去掉查询条件测试,修改控制器中的查询代码为User.find({}),如果能返回数据,就说明是条件匹配的问题,修正数据库中isAdmin字段的类型即可。 - 数据库连接错误
- 检查你手动录入的数据是否存储在连接的
Users库中,有没有误存到之前注释的TestDb库下 - 检查配置文件名:你标注的配置文件名为
db.config.json,但文件内容是Node.js的模块导出语法,且index.js中导入的是db.config.js,如果文件名确实是.json后缀,会导致配置读取失败,连接到错误的数据库,将配置文件名修正为db.config.js即可。
- 路由与数据库连接顺序问题(低概率)
你当前的server.js中是先注册路由,再连接数据库,虽然不会直接导致查询为空,但如果首次请求触发时数据库还未完成连接,也可能出现异常,建议把数据库连接的代码移到路由注册之前执行。
内容的提问来源于stack exchange,提问作者TechGuy
相关产品推荐
相关产品推荐

