2016-12-21 2 views
0

Я использовал статью this как ссылку, но, наверное, я что-то прикрутил.Как глубоко заселить на мангусте

Я хочу глубоко заполнить модель Корзина:

var CartSchema = new Schema({ 
    products: [{ 
    product: { type: Schema.ObjectId, ref : 'Product' }, 
    quantity: { type: Number, default: 1} 
    }], 
    totalItems: { type: Number, default: 0}, 
    message: { type: String }, 
    client: { type : Schema.ObjectId, ref : 'User' }, 
    time: { type: Date, default: new Date()}, 
    session: { type: String } 
}); 

Так я получаю product.addons и product.description.item

var ProductSchema = new Schema({ 
    name: { type: String, default: '' }, 
    inventory: { type: Number }, 
    type: { type: String, default: 'cesta' }, 
    price: { type: Number, required: true }, 
    discount: { type: Number}, 
    description: [{ 
    item: { type : Schema.ObjectId, ref : 'Item' }, 
    quantity: Number 
    }], 
    photos: { 
    photo1: String, 
    photo2: String 
    }, 
    related_products: [{ type : Schema.ObjectId, ref : 'Product' }], 
    addons: [{ type : Schema.ObjectId, ref : 'Product' }], 
    category: { type: Schema.ObjectId, ref: 'Category' }, 
    code: { type: String }, 
    descricao_avulsa: String, 
    slug: String 
}); 

Я попытался это, но это, кажется, идет на каком-то вечном цикле (это не console.log:

var populate = { 
    path: "products.product", 
    model: 'Product', 
    populate: [ 
     { path: "price name photos slug" }, 
     { path: "description.item addons", model: 'Item'} 
    ] 
}; 
Cart.findOne({session: req.cookies['express:sess']}) 
    .populate(populate) 
    .exec(function(err, cart){ 
    if(err){ 
     return err;  } 
    console.log(cart.products[0].product); 

    next(); 
    }); 

Я также попытался один и тот же код, с этим для populat e variable:

var populate = [ 
    { path: "products.product", select: "price name photos slug description addons" }, 
    { path: "products.product.description.item", select: "name" }, 
    { path: "products.product.addons", select: "name" } 
]; 

Но это не дает мне результатов, которые я хочу.

Я хочу, чтобы мой результат, чтобы выглядеть примерно так:

{ 
    _id: 5859790cc307556218b9d2e1, 
    slug: 'nova-cestinha', 
    price: 14300, 
    addons: [ { name: 'produto' } ], 
    photos: { 
    photo1: 'https://frutacor.s3.amazonaws.com/1482258691162', 
    photo2: 'https://frutacor.s3.amazonaws.com/1482258691189' 
    }, 
    description: 
    [ { 
     item: {name: 'casadinho'}, 
     quantity: 4, 
     _id: 5859790cc307556218b9d2e4 
    }, 
    { 
     item: {name: 'brownie}, 
     quantity: 5, 
     _id: 5859790cc307556218b9d2e3 } 
    ], 
name: 'nova cestinha' 
} 

ответ

1

Вы находитесь на правильном пути, только простые ошибки в вашем втором фрагменте кода. Попробуйте это и проверьте, не получили ли вы желаемые результаты:

Cart.findOne({session: req.cookies['express:sess']}) 
.populate({ 
    path : 'products.product', 
    select : 'price name photos slug description addons', 
    populate : [{ path : 'description.item' , select : 'name', model: 'Item'}, 
     { path : 'addons',select : 'name'}] 
}) 
.exec(function(err, cart){ 
... 
}); 
+0

Это работало для аддонов. Я попытаюсь выяснить описание.item, спасибо за помощь – iagowp

+0

Должно быть, это сработало для обоих, я не знаю о множественном заполнении внутри заполнения, но это могло вызвать проблему, иначе это должно было сработать. –

+1

Я добавил «model:« Item »в description.item, и это сработало, не совсем понятно почему. Я не совсем уверен в лучшем способе работы с этим в stackoverflow, поэтому я попытался отредактировать ваш ответ, чтобы он был прав, и я могу принять его – iagowp

Смежные вопросы