mongoose自定义模式types

我从mongoose的文档中读到,可以创build自定义的模式types,添加到已经存在的模式types中。

正如我所build议的,我试图看看mongoose长的例子: https : //github.com/aheckmann/mongoose-long

我需要这个在我正在开发的应用程序中,我有一个简介是一个mongoose模型。 该configuration文件有几个字段,如namesurnameMultiValueFieldMultiValueField位于具有以下结构的对象上:

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

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

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

我的configuration文件的每个字段都应该使用不同的提供者列表进行初始化,但是我还没有find一种方法。

如果我将MultiValueField定义为Embedded Schema ,那么我只能将每个字段都作为Array 。 此外,我不能初始化每个领域的configuration文件创build提供商列表。

我认为最好的解决scheme是定义一个SchemaType MultiValueFieldType ,它具有返回MultiValueField objectMultiValueField object 。 但是,如何定义这样的自定义模式types呢? 在configuration文件的模式中定义它时,如何使用自定义选项?

我已经在mongooseGoogle小组上发布了一个问题,询问如何创build自定义模式types: https : //groups.google.com/forum/? fromgroups#! topic / mongoose-orm / fCpxtKSXFKc

我只能以数组的forms创build自定义模式types。 你将能够初始化模型,但是这个问题有一些缺点:

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

自定义架构types代码:

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

当这个代码运行时,它将保存初始化的位置和它的参数。

我不明白你的问题的所有主题,但我希望这个答案可以帮助你。