我正在尝试使用Mongoose向MongoDB添加一些数据,但是我无法将数据保存到我的数据库中。我正在关注YouTube上的this教程(约11分钟),但我认为视频可能正在使用不同版本的Mongoose。
基本上,我有一个单独的JS文件中定义的Product模式,我正在运行一个名为productSeeder.js的文件,通过在运行Mongo守护程序的终端中运行node productSeeder.js
。当我切换到正确的数据库并在Mongo shell中键入db.products.find()
时,没有任何内容返回给我。
我的productSeeder.js文件:
var Product = require('../models/product');
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/shopping');
var products = [
new Product({
imagePath: 'images/dummy.png',
price: 9,
title: 'a title',
desc: 'some text'
}),
new Product({
imagePath: 'images/dummy.png',
price: 5,
title: 'a title',
desc: 'some text'
})
];
var done = 0;
for (var i = 0; i < products.length; i++) {
products[i].save(function(err, result) {
if (err) {
console.log(err);
return;
};
done++;
if (done == products.length) {
mongoose.disconnect();
};
});
};
我的product.js文件:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var schema = new Schema({
imagePath: {type: String, required: true},
price: {type: Number, required: true},
title: {type: String, required: true},
desc: {type: String, required: true}
});
module.exports = mongoose.model('Product', schema);
非常感谢,节日快乐!
在尝试保存产品之前,您知道Mongoose是否已成功连接?
一种想法可能是因为Db访问是异步的,所以你试图在连接存在之前保存项目。
您可以将回调传递给您的连接或使用事件侦听器并将您的保存函数包装在连接回调中。
mongoose.connection.on('connected', function(){
//save products here
});
我已经读过一些Mongoose没有错误保存的情况。
编辑:可能更好听.on('open')
而不是(mongoose docs)。