我尝试使用Mongoose向MongoDB添加一些数据,但是我无法将数据保存到我的数据库中。我在YouTube上关注this教程(约11分钟),但我认为该视频可能使用了不同版本的Mongoose。
基本上,我在一个单独的JS文件中定义了一个Product模式,并且我在运行Mongo守护程序的终端中运行node productSeeder.js
来运行一个名为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);
非常感谢,节日快乐!
答案 0 :(得分:0)
在尝试保存产品之前,您是否知道Mongoose是否已成功连接?
有一种想法可能是因为Db访问是异步的,所以你试图在连接存在之前保存项目。
您可以将回调传递给您的连接或使用事件侦听器并将您的保存函数包装在连接回调中。
mongoose.connection.on('connected', function(){
//save products here
});
我已经读过一些Mongoose无法保存但没有错误的情况。
编辑:听取.on('open')
代替(mongoose docs)可能会更好。