2013-08-28 3 views
0

Как я могу заполнить вложенные ссылочные модели?Mongoose: вложенные модели реферирования

Например:

// 'Collection' model 
var CollectionSchema = new Schema({ 
    collection_name: String, 
    _groups: [{ type: Schema.Types.ObjectId, ref: 'Group' }], 
}); 

// 'Group' model 
var GroupSchema = new Schema({ 
    group_name: String, 
    _item: { type: Schema.Types.ObjectId, ref: 'Item' } // To be populated 
    _meta: [ { type: Schema.Types.ObjectId, ref: 'Meta' } // To be populated 
}); 

// 'Item' model 
var ItemSchema = new Schema({ 
    item_name: String, 
    item_description: String 
}); 

// 'Meta' model 
var MetaSchema = new Schema({ 
    meta_name: String, 
    meta_value: String 
}); 

Я хотел бы, чтобы заполнить каждый "_item" внутри "_group" в модели "Коллекция". Я имею в виду получить что-то вроде этого:

{ 
collection_name: "I'm a collection" 
_groups: [ 
      { _id: ObjectId("520eabd1da5ff8283c000009"), 
       group_name: 'Group1', 
       _item: { _id: ObjectId("520eabd1da5ff8283c000004"), 
         item_name: "Item1 name", 
         item_description: "Item1 description" 
        }, 
      _meta: { 
         _id: ObjectId("520eabd1da5ff8283c000001"), 
         meta_name= "Metadata name", 
         meta_value = "metadata value" 
        } 
      }, 
      { _id: ObjectId("520eabd1da5ff8283c000003"), 
       group_name: 'Group2', 
       _item: { _id: ObjectId("520eabd1da5ff8283c000002"), 
         item_name: "Item2 name", 
         item_description: "Item2 description" 
        }, 
      _meta: { 
         _id: ObjectId("520eabd1da5ff8283c000001"), 
         meta_name= "Metadata name", 
         meta_value = "metadata value" 
        } 
      } 
      ] 
} 

ответ

2
var Group = mongoose.model('Group', GroupSchema); 
Group.find().populate('_item').populate('_meta').exec(function (error, groups) { 
    //groups will be an array of group instances and 
    // _item and _meta will be populated 
}); 
5

Я предпочел бы сделать

var Group = mongoose.model('Group', GroupSchema); 

Group.find().populate('_item _meta').exec(function (error, groups) { 
    // ... 
}); 
Смежные вопросы