2014-10-01 34 views
1

У меня есть модель мангуста, которая выглядит следующим образом:Populate мангуст массив объектов

var ModuleSchema = new Schema({ 
systems: [{ 
    system: { 
      type: Schema.ObjectId, 
      ref: 'System' 
     }, 
      quantity: { 
      type: Number 
     } 
    }] 
}); 

mongoose.model('Module', ModuleSchema); 

ModuleSchema.systems.$.system В основном недвижимость не будет заполнена. Свойство принадлежит объекту в массиве объектов. Я попробовал все, чтобы заставить его заполнить, но этого просто не произойдет.

Я пробовал следующий синтаксис для заполнения, но не уверен, что может быть неправильным, потому что я все еще не возвращаю заполненную Системную собственность.

Module.findOne({project: pId}).sort('-created') 
    .populate('systems.system') 

ответ

0

Это не будет работать, поскольку система не является собственностью систем. Вам необходимо заполнить его как

Module.findOne({project: pId}).sort('-created') 
    .populate('systems.0.system').exec(function (err, doc){}) 

Module.findOne({project: pId}).sort('-created') 
     .populate('systems.1.system').exec(function (err, doc){}) 

Таким образом, вы должны иметь цикл и итерацию над ней, чтобы заполнить все документы. Кроме того, вы должны изменить свою модель, чтобы она работала лучше.

var ModuleSchema = new Schema({ 
systems: [{ 
    system: { 
      type: Schema.ObjectId, 
      ref: 'System' 
     }, 
      quantity: { 
      type: Number 
     } 
    }] 
}); 

Измените свою модель на это, и это облегчит вам задачу.

var ModuleSchema = new Schema({ 
     systems: { 
      system: [{ 
       type: Schema.ObjectId, 
       ref: 'System' 
      }], 
      quantity: { 
      type: Number 
     } 

     } 
    }); 
Смежные вопросы