MongoDB查询返回空对象求助:仅users集合查询正常
解决Mongoose查询非users集合返回空对象的问题
嘿,我之前也踩过这个坑,咱们一步步来排查可能的原因:
1. 集合名称自动映射的坑
Mongoose默认会把你的模型名转换成小写复数形式作为集合名,比如你定义的Schema是userPBData,它可能自动去找userpbdatas集合,但你实际的集合名可能是userPBData或者userPbData之类的。
解决方法:在创建模型的时候手动指定集合名称,比如:
// 假设你实际的集合名叫userPBData const UserPBData = mongoose.model('UserPBData', userPBData, 'userPBData');
2. Schema字段与实际文档不匹配
如果你的目标集合里的文档字段和Schema定义的不一致(比如大小写、字段名拼写),Mongoose会自动忽略不匹配的字段,导致返回的对象看起来是空的。
举个例子:如果实际文档里是Email(大写E),但你Schema里写的是email(小写e),那查询结果里就不会有这个字段。
解决方法:
- 要么调整Schema字段和实际文档完全一致;
- 要么在定义Schema时开启
strict: false选项,让Mongoose返回所有字段:
var userPBData = new Schema ({ _id: mongoose.Schema.Types.ObjectId, email: String, password: String, token: String, name: String, phone: String }, { strict: false }); // 加上这个选项
3. 连接的数据库不对
你当前连接的是admin数据库(URL里的最后一段是admin),但你的目标集合可能在其他数据库里!比如你要查的集合在myappdb里,那肯定查不到数据。
解决方法:修改连接URL,指定正确的数据库名:
var url = 'mongodb://test:test@124.355.99.268:27017/你的目标数据库名'; mongoose.connect(url);
或者连接后切换数据库:
mongoose.connect(url); const db = mongoose.connection.useDb('你的目标数据库名'); // 用db来创建模型 const UserPBData = db.model('UserPBData', userPBData);
4. 查询条件类型不匹配
如果你的查询条件用了_id,但传入的是字符串而不是ObjectId类型,Mongoose会查不到匹配的文档,返回空对象。
解决方法:把查询用的字符串转换成ObjectId:
const targetId = mongoose.Types.ObjectId("你要查询的_id字符串"); UserPBData.findOne({ _id: targetId }, (err, data) => { // 处理结果 });
附上你提供的代码片段方便参考:
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var url = 'mongodb://test:test@124.355.99.268:27017/admin'; mongoose.connect(url); var userPBData = new Schema ({ _id: mongoose.Schema.Types.ObjectId, email: String, password: String, token: String, name: String, phone: String })
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

