扩展Mongoose模型而不存储所有属性

时间:2014-08-27 09:35:58

标签: node.js mongodb express mongoose

我正在构建基于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模型分开吗?

2 个答案:

答案 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对象。