Hyper终端及Mongoose查询MongoDB返回空数组,Studio3T显示正常
问题排查方案
最可能的原因:集合名称不匹配
这是MongoDB + Mongoose场景下最常见的坑,核心是Mongoose的自动复数化规则和MongoDB集合名大小写敏感导致的:
- Mongoose默认会把你定义的模型名转为小写复数形式,比如你定义
const Book = mongoose.model('Book', bookSchema),Mongoose会自动去查books集合;但如果你在Studio3T里创建的是Book(单数)或者book(单数小写),就会查不到文档。 - 另外MongoDB在Linux/macOS环境下集合名是大小写敏感的,如果你Studio3T里创建的是
MyCollection,但mongosh里敲成mycollection,自然查不到。
具体排查步骤
第一步:核对集合名完全一致
在mongosh里执行show collections,把显示的集合名和Studio3T里的对比,要完全一模一样(包括大小写、单复数)。
如果是Mongoose的问题,定义模型时手动指定集合名,跳过自动复数化:// 第三个参数就是你在Studio3T里创建的实际集合名 const MyModel = mongoose.model('MyModel', mySchema, 'your_collection_name');第二步:确认连接的是同一个数据库
在mongosh里输入db.getName(),看当前数据库是不是你在Studio3T里操作的那个;Mongoose代码里也可以打印连接的数据库名:mongoose.connect('mongodb://localhost:27017/your_db_name') .then(() => console.log('Connected to', mongoose.connection.name))别不小心连到默认的
test库了。第三步:检查查询条件和字段类型
如果Mongoose代码里用了find({xxx: yyy}),确认这个条件在Studio3T的文档里确实存在;另外注意_id类型,如果Studio3T里插入的_id是字符串,而Mongoose模型里定义的是ObjectId,可以尝试把查询条件里的_id转成ObjectId,或者在模型里把_id类型设为String。
内容的提问来源于stack exchange,提问作者user237736
相关产品推荐
相关产品推荐

