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 }] });