我的MEAN应用程序中使用了以下mongoose模式:
// schema
var categorySchema = new Schema ({
sId: String,
name: String,
parentId: String,
merchants: {},
attributes: {}, /* used to generate pivots and then discarded. */
pivots: [],
_id: {type: String, select: false},
/*other elements in db also not returned by using select: false*/
});
这就是问题所在。我有一个不是由我的应用程序创建的mongodb,而是其实际的架构在别处定义。我可以访问这些数据,但希望它的格式与数据库中的实际数据完全不同。通过使用:
,这很有用categorySchema.options.toJSON = {
transform: function(doc, ret, options) {
然而,架构并不代表完整的API合同,因为"属性"模式中的字段在转换中被删除。数据库中没有数据透视表,但是模式需要mongoose才能返回它。值得庆幸的是,我喜欢这个,我希望模式能够准确地反映出我要返回的内容,而不是数据库中的内容,因为坦率地说,这很糟糕,而且我正在大力改造它,所以我可以把它交给其他工程师并将其用于自动化测试。
如何从模式中获取属性但仍能在变换中使用?
答案 0 :(得分:0)
原来mongoose有功能转换。所以我可以这样做:
merchants: { type: {}, get: objToArr},
并调用该函数。
请务必设置:
Schema.set(' toObject',{getters:true}); Schema.set(' toJSON',{getters:true});
为真。