【问题标题】:Mongoose embedded documents of each otherMongoose 相互嵌入文档
【发布时间】:2015-07-17 09:16:16
【问题描述】:

我有一个包含这些集合的 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:
}

如您所见,我对字段进行了非规范化。现在我无法弄清楚如何将它与猫鼬模式链接起来。

我有这个,但这似乎不对:

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

我的非规范化错了吗?(应用程序需要大量获取 categoryname 和 productname 这就是我对其进行非规范化的原因)

【问题讨论】:

    标签: node.js mongodb mongoose denormalization


    【解决方案1】:

    你的猫鼬语法有点不对劲。试试这个(下):

    请注意,我建议删除根架构的 _id 字段。 Mongo 会自动为你生成一个_id 字段,类型为ObjectId,可以派上用场。如果您愿意,您可以选择使用_id: Number 覆盖它,但我只建议您在有充分理由的情况下这样做。

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

    【讨论】:

      猜你喜欢
      • 2012-02-18
      • 2012-08-26
      • 2014-06-12
      • 2023-03-10
      • 2022-10-16
      • 2015-09-14
      • 2011-12-21
      • 2011-09-06
      • 2017-06-22
      相关资源
      最近更新 更多