Как заполнить вложенные встроенные документы 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, не будут меняться очень часто, если вообще будут меняться. Я решил, что было бы лучше иметь все данные в модели Каталога, потому что, хотя есть несколько категорий, цветов и материалов, их будет не так много, и мне не нужно находить какие-либо из них независимо от Каталога.

Но я совершенно не понимаю, как сохранять данные в модель. Вот где я вхожу в тупик:

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() недоступен для вложенных документов.

5
задан rob_hicks 2 April 2012 в 18:43
поделиться