5

我从 mongoose 文档中了解到,可以创建自定义模式类型以添加​​到已经存在的模式类型中。

正如建议的那样,我试图研究 mongoose-long 示例:https ://github.com/aheckmann/mongoose-long

我在我正在开发的应用程序中需要这个,其中我有一个猫鼬模型的配置文件。配置文件有几个字段,例如namesurname等等MultiValueField。AMultiValueField在具有以下结构的对象上:

{
    current : <string>
    providers : <Array>
    values : {
         provider1 : value1,
         provider2 : value2
    }
}

上面的结构有一个允许的提供者列表(按优先级排序),可以从中检索字段的值。当前属性跟踪当前选择哪个提供者用作字段的值。最后,对象值包含每个提供者的值。

我在 node.js 中定义了一个对象,它的构造函数将上面的结构作为参数,并提供了很多有用的方法来设置新的提供者,添加值等等。

我的个人资料的每个字段都应该使用不同的提供者列表进行初始化,但我还没有找到这样做的方法。

如果我定义MultiValueFieldEmbedded Schema,我只能将每个字段都定义为Array。此外,在使用提供者列表创建配置文件时,我无法初始化每个字段。

我认为最好的解决方案是定义 a SchemaType MultiValueFieldType,它有一个返回 a 的强制转换函数MultiValueField object。但是,如何定义这样的自定义模式类型?在配置文件的架构中定义自定义选项时,如何使用自定义选项?

我已经在 mongoose Google group 上发布了一个问题,询问如何创建自定义模式类型:https ://groups.google.com/forum/?fromgroups#!topic/mongoose-orm/fCpxtKSXFKc

4

1 回答 1

0

我也只能将自定义模式类型创建为数组。您将能够初始化模型,但这种方法有缺点:

  • 即使你不需要它们,你也会有数组
  • 如果您在其他模型上使用 ParameterSchema,则需要复制它

自定义模式类型代码:

// 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();

当此代码运行时,它将保存初始化位置及其参数。

我不了解您问题的所有主题,但我希望这个答案对您有所帮助。

于 2015-05-14T18:06:00.050 回答