Как передать вложенные массивы из бэкэнда во внешний интерфейс с помощью Mongoose в Node.js?

Это моя схема MongoDB:

var partnerSchema = new mongoose.Schema({
    name: String,
    products: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Product'
        }]
});

var productSchema = new mongoose.Schema({
    name: String,
    campaign: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: 'Campaign'
        }
    ]
});

var campaignSchema = new mongoose.Schema({
    name: String,
});


module.exports = {
    Partner: mongoose.model('Partner', partnerSchema),
    Product: mongoose.model('Product', productSchema),
    Campaign: mongoose.model('Campaign', campaignSchema)
}

И я хотел бы отправить все документы (partner>product>campaign) в свой вид как один объект.

Я знаю, как отправить partner с product реф. Например:

var campSchema = require('../model/camp-schema');
router.get('/partner-list', function (req, res) {
    campSchema.Partner.find({}, function (err, partnerList) {
        if (err) throw err;
        res.json({ partnerList: partnerList });
    }).populate('products');
});

И я могу легко повторять при просмотре таким образом:

   li(ng-repeat="product in partner.products")
       a(href="#") {{ product.name }}

И вот вопрос. Как я могу передать ОДИН объект как документ с partner, product и campaign. Потому что на данный момент у меня есть только partner и product в этом объекте.


person DiPix    schedule 23.06.2016    source источник
comment
Попробуйте этот: .populate('products','products.campaign') (вероятно, не сработает, но, думаю, стоит попробовать.   -  person libik    schedule 23.06.2016


Ответы (1)


Вы можете использовать этот шаблон для заполнения вложенной модели кампании:

var campSchema = require('../model/camp-schema');
router.get('/partner-list', function (req, res) {
    campSchema.Partner
        .find({})
        .populate({
            path: 'products',
            model: 'Product',
            populate: {
                path: 'campaign',
                model: 'Campaign'
            }
    }).exec(function(err, partnerList) {
        if (err) throw err;
        res.json({ partnerList: partnerList });
    });
});
person chridam    schedule 23.06.2016
comment
Я не знаю, почему, но .exec работает неправильно. Ошибка: Expected ';' prntscr.com/bk2aun Я что-то пропустил? - person DiPix; 23.06.2016
comment
@DiPix Извините, я не учел функцию обратного вызова. Теперь это должно работать. - person chridam; 23.06.2016
comment
Спасибо. Теперь мне интересно, как удалить объект. Если можете, проверьте этот пост: stackoverflow.com/questions/38011068/ - person DiPix; 24.06.2016