我正在编写一个mongoose插件,涉及向子模板添加元素。我觉得这很简单,但是我已经尝试了几天不成功。
以下是架构的简化:
var inheritables = require('./inheritables.server.module.js');
var OuFieldTypeSchema = new Schema({
name: String,
desc: String
});
var OuFieldType = mongoose.model('OuFieldType', OuFieldTypeSchema);
var OuSchema = new Schema({
name: String,
fieldTypes: [OuFieldTypeSchema],
});
OuSchema.plugin(inheritables, {inherit: ['fieldTypes']});
mongoose.model('Ou', OuSchema);
在我的Mongoose插件的主体中,我想迭代继承"继承"数组并将以下内容添加到表示Ou模式中每个元素的模式中;
我的插件的简化如下:
var _ = require('lodash');
module.exports = exports = function(schema, options) {
_.each(options.inherit, function(currItemSchema){
var addToSchema = {inheritedFrom: {name: String}};
//Really want to add this to the OuFieldTypeSchema represented by the fieldTypes element array.
schema.add(addToSchema, currItemSchema + ".");
});
});
请注意,add()的第二个参数会添加一个前缀,但这不起作用。
我也尝试过:
_.each(options.inherit, function(currItemSchema){
var addToSchema = {};
addToSchema[currItemSchema] = {inheritedFrom: {name: String}};
schema.add(addToSchema);
});
这里的预期行为是我的插件中的其他地方,我有一个设置inheritedFrom模式的方法。设置项目时不会收到任何错误,但结果输出永远不会看到inheritedFrom元素。
我目前正在将inheritedFrom添加到OuFieldType使用的每个子模板中,但上面是简化并且不是很干。
我是Node.JS的新手 - 非常感谢任何正确方向的指针。