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

使用Mongoose执行find查询报错cursor.toArray is not a function如何解决

问题原因

  • 核心原因是mongoose.connect为异步操作,你没有等待数据库连接完成就直接执行Note.find查询,此时数据库连接上下文未就绪,导致查询返回的游标对象异常,触发cursor.toArray is not a function报错。
  • 连接配置缺少高版本Mongoose要求的必填参数,且所有异步操作都没有添加错误捕获逻辑,导致出现未处理的Promise拒绝警告。
  • 若你使用的是Mongoose 6.x以上版本,旧的回调写法存在部分兼容问题,优先使用Promise/async await写法。
  • 连接URL中的<password>为占位符,未替换为MongoDB Atlas的实际账号密码也会导致连接失败。

修复方案

你可以直接使用以下修正后的代码:

const mongoose = require("mongoose");

// 把url中的占位符替换为你自己的MongoDB Atlas实际密码
const url =
    "mongodb+srv://Saif:替换为实际密码@cluster0.8d2lb.mongodb.net/notes-app?retryWrites=true&w=majority";

// 补充完整连接参数,等待连接成功后再执行查询
mongoose.connect(url, {
    useNewUrlParser: true,
    useUnifiedTopology: true
})
.then(() => {
    console.log("数据库连接成功");
    // 连接成功后再执行查询逻辑
    const noteSchema = new mongoose.Schema({
        content: String,
        date: Date,
        important: Boolean,
    });

    const Note = mongoose.model("Note", noteSchema);

    return Note.find({});
})
.then((result) => {
    result.forEach((note) => {
        console.log(note);
    });
    mongoose.connection.close();
})
.catch(err => {
    // 统一捕获所有错误:连接错误、查询错误都在这里处理
    console.log("操作失败:", err);
    mongoose.connection.close();
});

如果需要使用回调写法,也要把查询逻辑放到连接成功的回调中:

const mongoose = require("mongoose");

const url =
    "mongodb+srv://Saif:替换为实际密码@cluster0.8d2lb.mongodb.net/notes-app?retryWrites=true&w=majority";

mongoose.connect(url, {
    useNewUrlParser: true,
    useUnifiedTopology: true
}, (err) => {
    if (err) {
        console.log("连接失败:", err);
        return;
    }
    const noteSchema = new mongoose.Schema({
        content: String,
        date: Date,
        important: Boolean,
    });

    const Note = mongoose.model("Note", noteSchema);

    Note.find({}, (error, data) => {
        if (error) {
            console.log("查询失败:", error);
        } else {
            data.forEach((note) => {
                console.log(note);
            })   
        }
        mongoose.connection.close()
    })
})

内容的提问来源于stack exchange,提问作者Saif eldeen Adel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 08:15:04