我想知道它是否可以保存使用构造函数创建的对象。例如:
我有一个名为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
});
我能做出像这样的工作吗?
答案 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);
};
但是,我确信很多人可能会找到一个非常有用的架构字段类型。