猫鼬架构与不同的对象

时间:2019-11-14 14:45:05

标签: node.js mongodb mongoose

我有一个基本的架构,如下所示:

let Entry = new Schema({
key: String,
items: [
    {
        id: Number,
        text: String
    }
]});

但是项目架构可能有所不同,我希望我可以追加具有与基础架构相同架构的新对象。这样项目中的对象也可以拥有自己的项目。示例:

let Entry = new Schema({
key: String,
items: [
    {
        id: Number,
        text: String
    },
    {
        key: String,
        items: [
            ...
        ]
    }
]
});

依此类推...这样,我可能会拥有4个带有idtext的普通物品对象,或者还有items中的嵌套对象,它们又有{{1 }}和key属性,甚至可以进一步重复该过程。

1 个答案:

答案 0 :(得分:1)

一种方法是利用猫鼬的Mixed类型。

说像这样:

let Entry = new Schema({
key: String,
items: [
    {
        id: Number,
        text: String,
        data: {
            type: Schema.Types.Mixed,
            default: {}
        }
    }
]});

现在,此示例将所有“自定义”字段放置在数据属性内,不确定是否满足您的需求。

用法

const newEntry = new Entry({
    id: 1,
    text: "foobar",
    data: {
        hello: "world",
        isCorrect: true
    }
});

或者,您可以仅在模式上将strict设置为false。

let Entry = new Schema({
key: String,
items: [
    {
        id: Number,
        text: String
    }
]}, { strict: false});

用法

const newEntry = new Entry({
    id: 1,
    text: "foobar",
    hello: "world",
    isCorrect: true
});

我的个人喜好将是第一个选择,至少以这种方式,看看模式,我知道在“数据”字段中包含的每个记录中都有一个混合的“数据包”。两者都是猫鼬文档中定义的文档化方法,因此完全有效。选择你的毒药:)

参考:

混合模式类型文档:

https://mongoosejs.com/docs/schematypes.html#mixed

严格模式选项文档:

https://mongoosejs.com/docs/guide.html#strict