名为"类型"的Mongoose子文档和属性;

时间:2014-07-29 08:59:50

标签: javascript mongoose

使用Mongoose连接数据库:

var mongoose = require('mongoose');

var poi_schema = mongoose.Schema({
  name: String,
  geo: { // GeoJSON
    type: String,
    coordinates: [Number, Number]
  }
});

var Poi = mongoose.model('Poi', poi_schema);


var db = mongoose.connection;
mongoose.connect('mongodb://localhost:27017/test');
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
    var poi = new Poi();
    poi.name = 'hello';
    poi.geo.type = 'Point';
    poi.geo.coordinates = [34, 23];
    poi.save(function(err, poi) {
      if (err) console.error('save error', err);
      else console.log(poi._id, poi.name, 'saved');
    });
});

这将失败,错误为TypeError: Cannot set property 'type' of undefined

一旦我更改单词"输入"对别的东西,它确实有效。 为什么?我实际上试图使用2dsphere索引存储GeoJSON,我认为这需要调用字段名称"键入"。而使用Mongoose它不起作用?!

1 个答案:

答案 0 :(得分:2)

你必须这样做:

  geo: { // GeoJSON
    type: {type: String},
    coordinates: [Number, Number]
  }

对于使用2dsphere索引,您不需要输入:' Point'属性,除非你想存储的不仅仅是Point。