2016-10-19 4 views
0

Это моя схема:Mongoose заселение массив внутри вложенной схемы

var userSchema = { 
    folders   : [ folderSchema ], 
    ... 
} 

var folderSchema = new mongoose.Schema({ 
    itemlist  : [{ type: String, ref: 'Item', required: true }], 
    foldername : { type: String}, 
    ... 
}); 

// Item model 
var itemSchema = { 
    name: { type: String }, 
    ... 
} 

Я хотел бы, чтобы заполнить ITEMLIST (весь массив) внутри каждого folderSchema, возможно ли это?

То, что я пытался до сих пор, но не работает:

userModel.findOne({ _id: userId }, null, callback).populate({ 
    path: 'folders.$.itemlist', 
    select: 'name' 
}); 

Это post и это post похожи, но они хранят модели папок и есть реф вместо вложенного документа.

Бонус: можно ли выбрать только несколько папок по имени папки, чтобы заполнить их список элементов?

ответ

0

Я думаю, что вы ищете «глубокого населения», смотрите в разделе population «Наполнение на нескольких уровнях»

переписать Заполнить до:

userModel.findOne({ _id: userId }, null, callback).populate({ 
    path: 'folders', 
    populate: { path : 'itemlist'} 
}); 
0

Самым простым решением является на самом деле получить вложенное и выполнить поиск вручную. Затем просто вызовите find ({_ id: {$ in: folder}}); для поиска всех элементов массива.