mongoose中model.save()无执行且无报错,数据导入MongoDB失败求助
解决Mongoose model.save()无执行无报错的问题
我帮你排查了下代码里的问题,主要有这么几个点导致save()既不执行也没报错:
1. 数据库连接与模型不绑定
你用了mongoose.createConnection()创建数据库连接,但你的Product模型是基于mongoose的默认全局连接生成的,两者没有关联——模型根本不知道该用你新建的这个连接去操作数据库,自然不会执行保存逻辑。
解决办法二选一:
- 改用全局连接:把
createConnection换成mongoose.connect(),这样模型会自动绑定到这个全局连接:// feed.js 里的连接代码替换成 mongoose.connect("mongodb://127.0.0.1:27017/shopping") .then(() => console.log('数据库连接成功')) .catch(err => console.error('连接失败', err)); - 将模型绑定到指定连接:如果一定要用
createConnection,需要从连接实例上创建模型:// feed.js var mongoose = require('mongoose'); // 创建连接实例 const dbConnection = mongoose.createConnection("mongodb://127.0.0.1:27017/shopping"); // 从连接实例加载模型(注意要导入schema而不是现成的model) var Product = dbConnection.model('Product', require('../models/product').schema);
2. 未等待数据库连接完成就执行save
数据库连接是异步操作,你直接创建Product并调用save()时,可能数据库还没连上,这时候操作会静默失败,不会触发回调也不会报错。
解决办法:等待连接成功后再执行保存
推荐用async/await来处理异步逻辑,代码更清晰:
// feed.js 完整修改示例 var Product = require('../models/product'); var mongoose = require('mongoose'); async function importProducts() { try { // 等待连接成功 await mongoose.connect("mongodb://127.0.0.1:27017/shopping"); console.log('数据库连接成功'); // 创建产品实例(注意price改成数字类型) const product = new Product({ image: "post1.jpg", title: "Lenevo Laptop", description: "long description here", price: 3500 // 匹配schema里的Number类型 }); // 等待保存完成 await product.save(); console.log('数据导入成功!'); // 导入完成后断开连接 await mongoose.disconnect(); } catch (err) { console.error('导入失败:', err); await mongoose.disconnect(); } } // 执行导入函数 importProducts();
3. 字段类型不匹配(潜在问题)
你的Product schema里price定义的是Number类型,但你传了字符串'3500'。虽然Mongoose可能会自动转换字符串为数字,但如果转换失败(比如传了非数字字符串),就会触发验证错误,建议直接传入数字类型,避免不必要的麻烦。
内容的提问来源于stack exchange,提问作者Ramesh Chand
相关产品推荐
相关产品推荐

