gpt4 book ai didi

node.js - Mongoose 错误 : nesting Schemas

转载 作者:IT老高 更新时间:2023-10-28 13:20:31 24 4
gpt4 key购买 nike

我有一个关于嵌套 Mongoose 架构的问题。

这是一个简单的代码片段

var aSchema = new Schema({bar: String});
var bSchema = new Schema({a: aSchema, foo: String});
var cSchema = new Schema({as: [aSchema], foo:String});

这将在 bSchema 上抛出 TypeError:TypeError: Undefined type at 's' 你尝试嵌套模式了吗?您只能使用 refs 或数组进行嵌套。,但适用于 cSchema

只想问为什么bSchema 不起作用。在 Mongoose 文档中找不到解释。谢谢。

最佳答案

MongoDB 不是关系数据库。这可能会让一些习惯于 RDBS 模型的人感到困惑(我仍然偶尔会被绊倒……但我真的不是 DB 人)。

通常,您会发现在您的 Mongo 实体中引用其他 文档 是有益的。 Mongoose 模式提供了一种非常简单有效的方法来执行此操作,感觉非常相关。

在定义将存储对不同类型文档的引用的架构时,您将相关属性定义为具有 typeref 的对象。通常在定义架构属性时,您可以简单地说:a: Number;但是,Mongoose 为除类型之外的模式属性提供了许多不同的选项:

a: {
type: Number,
required: true
}

设置 required: true 将阻止我们保存不存在 a 属性的文档。

一旦您了解了如何使用对象定义来定义架构,您就可以利用 Mongoose 的填充机制:

a: {
type: Mongoose.Schema.ObjectId,
ref: 'a'
}

这告诉 Mongoose 将特定 a 文档的 ObjectId(Mongoose 特定标识符)存储为我们模式的 a 属性.还在关注我吗?

在 Mongoose 文档上设置此属性时,您可以简单地说:doc.a = myA。当你去保存 doc 时,Mongoose 会自动进行转换,并且只将 ID 存储在你的数据库中。

在检索引用另一个架构的文档时,您需要进行填充。我不会深入讨论,但它非常简单 - check out the documentation .

关于node.js - Mongoose 错误 : nesting Schemas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27259449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com