Mongooseに埋め込まれたドキュメントとリンクされたドキュメントに関するいくつかの記事を読んだり再読み込みしました。私が読んだものに基づいて、私はそれは次のようなスキーマ構造を持っていることが最善であろうと結論している:入れ子になったMongoose埋め込みドキュメントを埋め込む方法
var CategoriesSchema = new Schema({
year : {type: Number, index: true},
make : {type: String, index: true},
model : {type: String, index: true},
body : {type: String, index: true}
});
var ColorsSchema = new Schema({
name : String,
id : String,
surcharge : Number
});
var MaterialsSchema = new Schema({
name : {type: String, index: true},
surcharge : String,
colors : [ColorsSchema]
});
var StyleSchema = new Schema({
name : {type: String, index: true},
surcharge : String,
materials : [MaterialsSchema]
});
var CatalogSchema = new Schema({
name : {type: String, index: true},
referenceId : ObjectId,
pattern : String,
categories : [CategoriesSchema],
description : String,
specifications : String,
price : String,
cost : String,
pattern : String,
thumbnailPath : String,
primaryImagePath : String,
styles : [StyleSchema]
});
mongoose.connect('mongodb://127.0.0.1:27017/sc');
exports.Catalog = mongoose.model('Catalog', CatalogSchema);
CategoriesSchemaで定義されたデータを、これまでならば、ColorsSchemaとMaterialsSchemaは、非常に頻繁に変更されません。複数のカテゴリ、色、素材がありますが、それほど多くはなく、カタログとは独立したものを見つける必要はないため、Catalogモデルのすべてのデータを持つ方がよいと判断しました。
しかし、私はモデルにデータを保存することについて完全に混乱しています。ここで私は困惑します:
var item = new Catalog;
item.name = "Seat 1003";
item.pattern = "91003";
item.categories.push({year: 1998, make: 'Toyota', model: 'Camry', body: 'sedan' });
item.styles.push({name: 'regular', surcharge: 10.00, materials(?????)});
item.save(function(err){
});
このようなネストされた埋め込みスキーマでは、どのように材料と色の埋め込みドキュメントにデータを取得するのですか?
.push()メソッドは、ネストされたドキュメントでは使用できないようです。
コレクションには多くのカタログがある場合は、我々はどのように特定のIDにプッシュしますか? –