保存mongoDB中的对象实例



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

我有一个名为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
});

我可以做这样的作品吗?

混合模式类型采用对象文字。但是,如果您传入一个带有函数的对象文字,它将被剥离。我知道。我试过:)。

有一个包可以让您将函数存储在模式中:

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

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

这不会很难(参见http://nanodeath.github.io/HydrateJS/)您可以像上面的mongoose函数包中那样编写一个自定义模式字段类型。

但总的来说,要到达你要去的地方需要做很多工作。为什么不简单地将实体的状态存储在模式中,并在常规实例方法中使用呢

var carSchema = new Schema({
color: Schema.Types.String
});
carSchema.methods.run = function  () {
console.log(this.color);
}; 

然而,我相信很多人可能会发现一种模式字段类型非常有用。

最新更新