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

首次运行Node.js服务时Mongoose find()方法返回空值问题求助

问题原因

你的问题核心是异步操作执行顺序不受控,外加每次启动服务都会重复执行插入逻辑:

  1. Node.js 中所有 mongoose 操作都是异步的,你当前的代码没有等待数据库连接建立、插入操作完成就提前执行了查询:
    • mongoose.connect 是异步操作,调用 main() 后代码不会等待连接完成就直接往下执行插入、查询逻辑,可能操作执行时连接还未就绪
    • Fruit.insertMany 和 Fruit.find 是并行执行的异步任务,首次运行时 find 会在插入完成前就执行,所以返回空数组,等 find 执行完插入才完成,所以数据库里能查到4条数据
    • 第二次运行时,第一次插入的4条数据已经存在,find 执行时能拿到之前插入的4条,同时本次的插入逻辑又新增4条,所以数据库总数据变成8条
  2. 你的插入逻辑没有做去重判断,每次运行 server.js 都会执行 people.save() 和 Fruit.insertMany,所以多次运行会不断生成重复数据

解决方案

把所有数据库操作放到连接成功后的逻辑中,用 async/await 严格控制执行顺序,如果只是测试插入可以在插入后关闭连接,避免重复执行插入:

修改后代码示例

const mongoose = require('mongoose');

const fruitSchema = new mongoose.Schema({
    name: String,
    rating: Number,
    review: String
});
const Fruit = mongoose.model('Fruit', fruitSchema);

const peopleSchema = new mongoose.Schema({
    name: String,
    age: Number
});
const People = mongoose.model('People', peopleSchema);

async function main() {
    // 1. 等待数据库连接成功
    await mongoose.connect('mongodb://localhost:27017/fruitsDB');
    console.log('数据库连接成功');

    // 2. 构造数据
    const apple = new Fruit({name: 'Apple', rating: 7, review: 'Pretty solid as fruit!'});
    const kiwi = new Fruit({name: 'Kiwi', rating: 10, review: 'The best fruit!'});
    const orange = new Fruit({name: 'Orange', rating: 4, review: 'Too sour for me!'});
    const banana = new Fruit({name: 'Banana', rating: 3, review: 'Weird texture!'});
    const people = new People({name: 'John', age: 37});

    // 3. 等待插入完成,不需要重复插入可以注释掉这段
    await people.save();
    await Fruit.insertMany([apple, kiwi, orange, banana]);
    console.log('所有数据插入完成');

    // 4. 插入完成后再执行查询
    const fruits = await Fruit.find();
    console.log('查询到的水果数据:', fruits);

    // 测试用,执行完成后关闭连接
    await mongoose.connection.close();
}

main().catch(err => {
    console.log('操作出错:', err);
    mongoose.connection.close();
});

额外优化建议

如果需要服务持续运行,不希望每次启动都重复插入数据,可以在插入前先查询对应数据是否存在,不存在再执行插入逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:18:03