我有一个基本的架构,如下所示:
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个带有id
和text
的普通物品对象,或者还有items
中的嵌套对象,它们又有{{1 }}和key
属性,甚至可以进一步重复该过程。
答案 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
严格模式选项文档: