【问题标题】:In Mongoose how declare dynamic Schema在 Mongoose 中如何声明动态 Schema
【发布时间】:2012-07-14 08:28:33
【问题描述】:

我是 Mongoose 的新手,在官方文档中我没有找到任何与我需要的东西相关的内容。

如何声明动态的子架构?

例如:

var A = new Schema({
    name        : String,
    subtype     : String,
    description : String
});

var B = new Schema({
    name        : String,
    description : String
});

var C = new Schema({
    name        : String,
    type        : [if(type.value == 'A') then uses Schema-A;
                   if(type.value == 'B') then uses Schema-B;
                  ]
});

希望它有意义。

提前致谢。

【问题讨论】:

    标签: node.js schema mongoose


    【解决方案1】:

    你为什么需要这个?

    在 Javascript 中你不需要考虑对象的类。

    你只需要知道当你想初始化它的时候和你想在MongoDB中搜索的时候的类型。

    【讨论】:

    • 嗨!感谢您的回复:D。我需要的是在猫鼬子模式中容纳变量字段,如果您知道这样做的方法,您可以发布一个示例吗?无论是在 Schema 定义阶段还是在初始化阶段,但如果解决方案没有失去使用 mongoose 的好处(验证等),那就太好了。
    • 将架构定义为所有可能字段的超集,然后使用验证中间件确保填充的字段集有效。
    • 在对此进行深入研究后,我意识到我的应用程序确实不需要;)谢谢。
    • 如果您使用从基类继承,则需要考虑对象的类。 RegularFoo 扩展了 Foo,FancyFoo 扩展了 Foo 等,其中 RegularFoos 具有与 FancyFoos 不同的属性,同时共享基本的 Foo 属性。
    【解决方案2】:

    您可以将架构的自定义部分的类型设置为 {},然后验证流入的不同结构。请参阅this gist。它不如为不同的情况设置不同的模式那么好,但它应该可以达到目的。从本质上讲,通过这种方式进行设置,您实际上是在说文档的该部分没有架构。将架构视为文档的确定部分,这里唯一确定的部分是动态部分的占位符。

    我认为,您也可以将每个不同的结构创建为不同的架构,但存储在同一个集合中,预先选择适当的架构。我从未尝试过,但由于底层 MongoDB 的无模式特性,应该允许这样做。

    【讨论】:

      猜你喜欢
      • 2021-05-21
      • 2013-11-02
      • 2011-11-21
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多