2017-01-31 10 views
1

Я новичок в MongoDB, пытаясь заселить данные из другой коллекции в ответ. Простейший пример будет выглядеть следующим образом:Можно ли заполнять вложенные ссылки в Mongoose?

const CartSchema = new Schema({ 
    items: [{ 
    product: { type: Schema.Types.ObjectId, ref: 'product' }, 
    qty: Number 
    }], 
    ... 
}); 

Я могу использовать .populate() когда отношения находятся на корневом уровне, но в приведенном выше примере, у меня есть массив элементов с их собственными свойствами, например qty, плюс _id ссылка на товар. Я хотел бы заполнить объект продукта в каждом элементе автомобиля, но, похоже, не может найти примеров того, что является «правильным» способом сделать это.

Cart.findById(id) 
    .populate('products') // <-- something like this 
    .then(record => ...) 
    .catch(next); 

Я знаю, что я мог бы сделать отдельный .find() по сбору продуктов после размещения корзины записи и вручную расширить исходный объект, но я надеялся, что там был способ заполнения данных в исходном запросе?

ответ

1

Вы можете попробовать это, это сработает для вас.

Cart.findById(id) 
    .populate('items.product') 
    .then(record => ...) 
    .catch(next); 

.populate('items.product') будет populate на product объект всех телеги элемента, присутствующего в массиве.