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

Mongoose调用find方法报错cursor.toArray is not a function及MongoInvalidArgumentError

问题解决方法

错误原因

  • 你所使用的mongoose 6.x及以上版本默认已经内置了useNewUrlParser、useUnifiedTopology等连接配置,额外传入过时的连接参数会触发MongoInvalidArgumentError报错,同时版本不兼容会导致游标调用方法异常。
  • 数据库连接是异步操作,你在连接未完全建立时就执行find查询,会导致游标对象初始化异常,触发cursor.toArray is not a function报错。

修复步骤

1. 修正连接配置

移除mongoose.connect中额外的配置参数,修改为:

const mongoose = require('mongoose')
// mongoose 6.x及以上版本无需传入额外连接参数
await mongoose.connect('mongodb://localhost:27017/fruitsDB')

如果需要用回调写法监听连接结果:

mongoose.connect('mongodb://localhost:27017/fruitsDB')
  .then(() => console.log('数据库连接成功'))
  .catch(err => console.log('连接失败:', err))

2. 调整代码时序,保证所有数据库操作在连接就绪后执行

推荐使用async/await写法优化异步逻辑,完整可运行代码如下:

const mongoose = require('mongoose')

const fruitSchema = new mongoose.Schema({
    name: String,
    price: Number
})

const Fruit = mongoose.model('Fruit', fruitSchema)

async function run() {
    // 先建立连接
    await mongoose.connect('mongodb://localhost:27017/fruitsDB')
    
    // 插入数据
    const banana = new Fruit({
        name: "Banana",
        price: 40
    })
    const apple = new Fruit({
        name: "Apple",
        price: 30
    })
    await banana.save()
    await apple.save()

    // 查询数据
    const docs = await Fruit.find()
    console.log(docs)

    // 操作完成后可关闭连接
    await mongoose.connection.close()
}

run().catch(err => console.log('操作出错:', err))

3. 若依然报错,修复依赖版本冲突

删除项目下的node_modules文件夹和package-lock.json文件,执行以下命令安装兼容的依赖版本:
npm install mongoose@7.x mongodb@5.x

内容的提问来源于stack exchange,提问作者Sandeep Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:00:02