我正在构建基于Node.js + Express + Mongoose的CMS。我想要业务和数据访问方法的抽象层。所以我有包含调用数据库方法的商业类。
这些调用是直接使用Mongoose模型进行的,所以我的逻辑实体是Mongoose实体。
问题在于某个逻辑实体并不总是与其数据库实体相同。
例如:我有一个名为" Item"有了它的属性,这些属性必须存储到数据库中,这很好。现在,我需要一个新属性,一个名为" similar_items"最终可以包含其他项目的列表,但我不想将此属性存储在数据库中。
var itemSchema = new Schema({
id: { type: Number, index: true },
name: { type: String }
});
var item = mongoose.model('Item', itemSchema);
var data = new Item();
/* do stuff.... */
data.similar_items = blahblah; //I can't set this property as it doesn't exists!
是否可以扩展具有属性的Mongoose模型?我知道我可以使用getter和setter定义虚拟属性,但我仍然没有" place"存储我的数组。
有什么想法吗? 我应该将逻辑模型和Mongoose模型分开吗?
答案 0 :(得分:3)
如果您在此时使用data
作为Mongoose实例,请在其上调用toObject()
将其转换为可以自由修改的普通JS对象:
data = data.toObject();
data.similar_items = blahblah;
答案 1 :(得分:0)
如果没有在架构中指定,则无法使用mongoose模型添加额外属性。如果要保存添加的属性,则必须在架构级别添加此属性。否则使用toobject()
方法在普通的javascript对象中传输它。
data = data.toObject();
data.any_property_name = required_value;
有一件事你无法在数据库中保存这个对象。因为它是一个简单的javascript对象。