在mongoDB中保存对象实例?

时间:2015-04-26 14:24:07

标签: mongodb object constructor mongoose

我想知道它是否可以保存使用构造函数创建的对象。例如:

我有一个名为Car的对象构造函数。

function Car = function(color) {
  this.color = color;
}

Car.prototype.run = function(){/* code here */}

var carSchema = new Schema({
  ob: Schema.Types.Mixed
});

var model = mongoose.model('Car', carSchema);

model.create({ob: new Car("blue")});

model.findOne({}, function (err, car) {
    if (err) { return; }
    if(!car) { return; }
    car.ob.run();  // it don't work
});

我能做出像这样的工作吗?

1 个答案:

答案 0 :(得分:1)

混合模式类型采用对象文字。但是如果你传入一个带有函数的对象文字,它就会被删除。我知道。我试过了:)。

有一个软件包可以让你在一个模式上存储函数:

https://www.npmjs.com/package/mongoose-function

这并不能完全符合您的要求,因为它不允许您存储构造的对象。它可能会让您了解您需要做什么。基本上,当您将构建的对象存储到Mongo时,需要找到一种方法来序列化构造对象,然后在使用Mongoose搜索函数检索构造对象后进行反序列化。

这不会非常困难(请参阅http://nanodeath.github.io/HydrateJS/),您可以像上面的mongoose-function包一样编写自定义架构字段类型。

但总而言之,到达目的地要做很多工作。为什么不只是做天真的事情并将模式的实体存储在模式中,并在常规实例方法中使用它,如下所示:

var carSchema = new Schema({
  color: Schema.Types.String
});

carSchema.methods.run = function  () {
   console.log(this.color);
}; 

但是,我确信很多人可能会找到一个非常有用的架构字段类型。