You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:04:52