我从mongoose文档中读到可以创建自定义模式类型以添加到已存在的模式类型中。
正如我所建议的那样,我试着研究一下mongoose-long的例子:https://github.com/aheckmann/mongoose-long
我在我正在开发的应用程序中需要这个,我有一个mongoose模型的配置文件。该个人资料有多个字段,例如name
,surname
等等MultiValueField
。 MultiValueField
在对象上,具有以下结构:
{
current : <string>
providers : <Array>
values : {
provider1 : value1,
provider2 : value2
}
}
上面的结构有一个允许的提供者列表(按优先级排序),从中可以检索字段的值。当前属性会跟踪当前选择哪个提供程序作为字段的值。最后,对象值包含每个提供者的值。
我在node.js中定义了一个对象,其构造函数将上面的结构作为参数,并提供了许多有用的方法来设置新的提供者,添加值等等。
我的个人资料的每个字段都应使用不同的提供商列表进行初始化,但我还没有找到办法。
如果我将MultiValueField
定义为Embedded Schema
,我只能将每个字段定义为Array
。此外,我无法在使用提供者列表创建配置文件时初始化每个字段。
我认为最好的解决方案是定义SchemaType MultiValueFieldType
,它具有返回MultiValueField object
的强制转换函数。但是,如何定义这样的自定义架构类型?如何在配置文件的架构中定义自定义选项时使用自定义选项?
我已经在mongoose Google小组上发布了一个问题,询问如何创建自定义架构类型:https://groups.google.com/forum/?fromgroups#!topic/mongoose-orm/fCpxtKSXFKc
答案 0 :(得分:0)
我也能够仅将自定义模式类型创建为数组。您将能够初始化模型,但这种方法有缺点:
自定义架构类型代码:
// Location has inputs and outputs, which are Parameters
// file at /models/Location.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ParameterSchema = new Schema({
name: String,
type: String,
value: String,
});
var LocationSchema = new Schema({
inputs: [ParameterSchema],
outputs: [ParameterSchema],
});
module.exports = mongoose.model('Location', LocationSchema);
初始化模型:
// file at /routes/locations.js
var Location = require('../models/Location');
var location = { ... } // javascript object usual initialization
location = new Location(location);
location.save();
当此代码运行时,它将使用其参数保存初始化位置。
我不理解你的问题的所有主题,但我希望这个答案可以帮助你。