无法在MongoDB数据库中创建集合

时间:2017-06-14 01:06:57

标签: node.js mongoose mlab

使用此代码在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');
  }
});

1 个答案:

答案 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键。