2017-06-14 160 views
0

使用此代码在mlab上托管的MongoDB数据库上创建集合。但不知怎的,它似乎并没有工作。在这段代码中是否有我缺少的东西? .save()函数似乎根本不会触发。它可能是由于我的模式?无法在MongoDB数据库中创建集合

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:[email protected]: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

好吧,我只是启动一个服务器并呈现一个HTML文件。我正在寻找任何新创建的集合的数据库。 –

+0

做这一行mongoose.connect('mongodb:// blaa:[email protected]:27132/vendor');数据库没有连接时不应该抛出错误。我用mongo终端尝试了URL,它说它连接正确 –

回答

0

mongoose.connect是一个异步功能,你需要把你的代码的回调或promise.then(function(){内。

试试这个:

mongoose.connect('mongodb://blaa:[email protected]:27132/vendor', function(error) { 
    if (error) 
     //handle error 
    //Your code 
}); 

或者这样:

mongoose.connect('mongodb://blaa:bla[email protected]:27132/vendor').then(
() => { 
    //Your code 
    }, 
    err => { 
    //Your error handling 
    } 
); 

通知的错误处理,它知道什么以便将来调试导致错误是很重要的。


而且改变location的JSON结构@NeilLunn在评论中说,当你保存它是这样的:

location: [23.600800037384033,46.76758746952729], 

type在猫鼬是指实际定义键的类型,而不是嵌套的type键。