【问题标题】:mongoose custom schema types猫鼬自定义模式类型
【发布时间】:2013-09-22 10:45:56
【问题描述】:

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

按照建议,我尝试研究 mongoose-long 示例:https://github.com/aheckmann/mongoose-long

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

{
    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

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

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

    • 即使您不需要数组,您也会拥有数组
    • 如果您在其他模型上使用 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();
    

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

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

    【讨论】:

      猜你喜欢
      • 2018-01-21
      • 1970-01-01
      • 2021-08-19
      • 2014-08-04
      • 2017-11-20
      • 1970-01-01
      • 2021-09-25
      • 2015-11-08
      • 1970-01-01
      相关资源
      最近更新 更多