如何在猫鼬的数组中使用不同类型的模式?

Posted

技术标签:

【中文标题】如何在猫鼬的数组中使用不同类型的模式?【英文标题】:How to use different type of schema in an array in mongoose? 【发布时间】:2014-01-13 12:29:23 【问题描述】:

我有这个架构:

var UserSchema = new Schema(
    documento: []
);

以及这类文件:

var RgSchema = new Schema(
    tipo: 'RG',
    numero: stringType(),
    orgaoEmissor: stringType(),
    dataExpedicao: dateType()
);

var CpfSchema = new Schema(
    tipo: 'CPF',
    numero: stringType()
);

如何在documento: []中设置不同类型的架构(RgSchema或CpfSchema)?

一种这样的:

documento: [RgSchema || CpfSchema]

【问题讨论】:

【参考方案1】:

我不认为你可以在当前版本的猫鼬中实现这一点。我建议您使用tipoenum 的共同架构。

var CommonSchema = new Schema(
    tipo: type:String, enum: ['RG', 'CPF']
    numero: stringType(),
    orgaoEmissor: stringType(),
    dataExpedicao: dateType()
);

其他选项是为不同的架构使用不同的ref

 var UserSchema = new Schema(
        documenRG: [],
        documenCPF: []

    );

【讨论】:

我将使用第二个选项,因为在我的情况下,CPF 没有此属性orgaoEmissor: stringType(), dataExpedicao: dateType()。感谢您的帮助! 如果数组元素(具有混合类型)的顺序很重要,如何使用第二个选项? @Tom 用户模式包含一个“documento”数组,可能如下所示:[RGref:..., CPFref:null, RGref:null, CPFref:..., RGref:..., CPFref:null]。 @Jayram 的答案中的“UserSchema”或“CommonSchema”有助于实现这一点。 我们不能简单地做这个文档吗:[RgSchema || CpfSchema] 在最新的猫鼬版本^5.3.20 ....这将是最简单和最不言自明的 我也有同样的问题 -> ***.com/questions/57788956/… ...谁能帮帮我?

以上是关于如何在猫鼬的数组中使用不同类型的模式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬的 document.save() 回调中隐藏字段?

如何在猫鼬的嵌入式文档中填充字段?

如何在猫鼬的集合中找到文档项的平均值?

如何使子文档在猫鼬的特定日期过期?

在猫鼬的子数组中获取具有匹配对象的对象

在猫鼬的子数组中获取具有匹配对象的对象