mongoose错误:嵌套模式

我有一个关于嵌套Mongoose模式的问题。

这是一个简单的代码片段

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

这将在bSchema上抛出TypeErrorTypeError: Undefined type at 's' Did you try nesting Schemas? You can only nest using refs or arrays. TypeError: Undefined type at 's' Did you try nesting Schemas? You can only nest using refs or arrays. ,但对于cSchema工作正常。

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

MongoDB 不是一个关系数据库。 这可能会导致一些习惯RDBS模式的人混淆(我偶尔会被绊倒……但我真的不是DB人)。

通常,您会发现在Mongo实体中引用其他文档是有益的。 mongoose模式提供了一个非常简单有效的方式来做到这一点,感觉非常关系。

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

 a: { type: Number, required: true } 

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

一旦你了解了如何用对象定义来定义你的模式,你可以利用Mongoose的人口机制:

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

这告诉Mongoose将特定文档的ObjectId (一个特定于Mongoose的标识符)存储为我们模式的a属性。 还是跟着我?

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

当检索引用另一个模式的文档时,您需要填充。 我不会去那,但它非常简单 – 检查文档 。

我正面临这个问题,因为我对MongoDB完全陌生 。 后来我发现我们需要在Mongoose的帮助下使用下面的关系。

以下是我国的模式。

 var mongoose = require("mongoose"); var Schema = mongoose.Schema; var ObjectId = Schema.Types.ObjectId; var CountrySchema = new Schema({ name: { type: String, required: true }, activeStatus: Boolean, createdOn: Date, updatedOn: Date }); 

我可以在我的状态模式中使用这个模式,如下所示。

 var mongoose = require("mongoose"); var Schema = mongoose.Schema; var ObjectId = Schema.Types.ObjectId; var StateSchema = new Schema({ name: { type: String, required: true }, country: {type: ObjectId, ref: "Country"}, activeStatus: Boolean, createdOn: Date, updatedOn: Date }); 

在这里,我正在使用ref的帮助指向我的其他架构。