使用此代码在mlab上托管的MongoDB数据库上创建集合。但不知何故,它似乎没有起作用。这段代码中有什么我遗漏的东西吗? .save()函数似乎根本没有触发。可以归结为我的架构吗?
var mongoose= require('mongoose');
var Schema= mongoose.Schema;
app.use(express.static(__dirname+'/views'));
app.use(express.static(path.join(__dirname, 'public')));
//connect to mongo db database
mongoose.connect('mongodb://blaa:blaa@ds127132.mlab.com:27132/vendor');
//vendor schema
var vendorSchema= new Schema({
name:String,
image: { data: Buffer, contentType: String },
vendortype:String,
location: {
type: [Number], // [<longitude>, <latitude>]
index: '2d' // create the geospatial index
},
contactinfo:String,
description:String
});
//creating a model for mongoDB database
var Vendor= mongoose.model('Vendor',vendorSchema);
//just putting a sample record data
var imgPath = 'public/images/background.jpg';
var one = Vendor({
name: 'Justin Motor Works',
vendortype: 'Automobile',
contactinfo:'6764563839',
location: {
type:[23.600800037384033,46.76758746952729]
},
image: {
data: fs.readFileSync(imgPath),
contentType: 'image/jpg'
},
description: 'Motor workshop'
}).
save(function(err){
if(err)
throw err;
else {
console.log('create record failed');
}
});
答案 0 :(得分:0)
mongoose.connect
是一个异步函数,您需要将代码放在回调或promise.then(function(){
中。
试试这个:
mongoose.connect('mongodb://blaa:blaa@ds127132.mlab.com:27132/vendor', function(error) {
if (error)
//handle error
//Your code
});
或者这个:
mongoose.connect('mongodb://blaa:blaa@ds127132.mlab.com:27132/vendor').then(
() => {
//Your code
},
err => {
//Your error handling
}
);
请注意错误处理,了解导致错误的原因以供将来调试非常重要。
在保存时,还要更改location
的JSON结构,因为@NeilLunn在评论中说的是这样的:
location: [23.600800037384033,46.76758746952729],
mongoose中的 type
表示实际定义键的类型,而不是嵌套的type
键。