mongoose互相embedded的文件

我有这些集合的mongoDb数据库

collection: Category { id: catnumber: nameNL: nameFR: subcategories:[id:, nameNL:, nameFR] products:[id,nameNL,nameFR] } Collection: Product { id: nameNL: nameFR: descriptionNL: descriptionFR: code1: code2: categories:[id:,nameNl:,nameFR] image: } 

正如你所看到的,我反规范的fields.Now我不知道如何链接这与mongoose模式。

我有这个,但是这似乎并不正确:

 var Schema = mongoose.Schema; var ProductSchema = new Schema({ _id: Number, nameNL: String, nameFR:String, descriptionNL:String, descriptionFR:String, code1:String, code2:String, categories: [CategorySchema._id,CategorySchema.nameNL,CategorySchema.nameFR] }); var CategorySchema = new Schema({ _id:Number, catNumber: String, nameNL: String, nameFR:String, subcategories:[CategorySchema.nameNL,CategorySchema.nameFR], products:[ProductSchema._id,ProductSchema.nameNL,ProductSchema.nameFR] }); 

我的反规范化是错误的吗?(应用程序需要获取类别名称和产品名称,这就是为什么我非规范化它)

你的mongoose的语法是有点closures。 试试这个(下面):

请注意,我build议删除根模式的_id字段。 Mongo会自动为你生成一个_id字段,它的types是ObjectId ,它可以派上用场。 如果你愿意的话,你可以select重写这个,用_id: Number但是如果你有一个很好的理由,我只会build议你这样做。

 var Schema = mongoose.Schema; var ProductSchema = new Schema({ nameNL: String, nameFR: String, descriptionNL: String, descriptionFR: String, code1: String, code2: String, categories: [{ _id: { type: Schema.Types.ObjectId, ref: 'Category' }, nameNL: String, nameFR: String }] }); var CategorySchema = new Schema({ catNumber: String, nameNL: String, nameFR: String, subcategories: [{ _id: { type: Schema.Types.ObjectId, ref: 'Category' }, nameNL: String, nameFR: String }], products: [{ _id: { type: Schema.Types.ObjectId, ref: 'Product' }, nameNL: String, nameFR: String }] });