подзаголовок мангуста не работает

вот моя схема:

var sourcesSchema = {
    title: String,
    name: String,
    url: String,
    description: String,
    category: Array,
    rating: Number,
    source_pages: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'source_page',
    }]
}


var sourcePageschema = {
    uname: String,
    source_name: String,
    page_address: String,
    driver_name: String,
    product: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'products' //Edit: I'd put the schema. Silly me.
    }
}

var productsSchema = {
    title: String,
    uname: String,
    descriptin: String,
    images: Array,
    currency: String,
    last_update_time: Number,
    last_process_time: Number,
    meta_data: {},
    tags: Array,
    min_price: Number,
    max_price: Number,
    prices: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'prices' //Edit: I'd put the schema. Silly me.
    }]
}

этот код работает и успешно заполняет исходные_страницы:

_sources.find().populate('source_pages').exec(function (err,sources) {
    res.json(200, sources);
});

но если я хочу заполнить и продукт:

_sources.find().populate('source_pages').populate('source_pages.product').exec(function (err,sources) {
    res.json(200, sources);
})

эта ошибка:

TypeError: невозможно вызвать метод 'path' неопределенного при поиске (/home/sina/rhino2/node_modules/mongoose/lib/model.js:2088:28) при поиске (/ home / sina / rhino2 / node_modules / mongoose / lib / model.js: 2107: 22) в Function._getSchema (/home/sina/rhino2/node_modules/mongoose/lib/model.js:2114:5) в заполнении (/ home / sina / rhino2 / node_modules / mongoose / lib / model.js: 1719: 22) в Function.Model.populate (/home/sina/rhino2/node_modules/mongoose/lib/model.js:1702:5) в cb (/ home / sina / rhino2 / node_modules / mongoose / lib / query.js: 1690: 11) в /home/sina/rhino2/node_modules/mongoose/lib/utils.js:414:16 в / home / sina / rhino2 / node_modules / mongoose / node_modules / mongodb / lib / mongodb /cursor.js:158:16 в commandHandler (/home/sina/rhino2/node_modules/mongoose/node_modules/mongodb/lib/mongodb/cursor.js:643:16) с нулевым значением. (/home/sina/rhino2/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:1641:20)


person Sina Miandashti    schedule 23.06.2013    source источник


Ответы (1)


Я просто искал ту же проблему, и я считаю, что вы ищете это Мангуст: глубокая популяция (заполнить заполненное поле).

По сути, вы не можете делать то, что пытаетесь сделать, если вы не сделаете это в своей функции обратного вызова, а затем не вставите ее в свой возврат. Я пытался избежать этого, но на данный момент это кажется единственным выходом. Другой вариант, если вы планируете делать много такого рода вещей, - это изучить использование реляционной БД.

person abritez    schedule 23.12.2013
comment
Я исправил эту проблему с помощью модуля async nodejs - person Sina Miandashti; 26.12.2013
comment
Спасибо, я тоже посмотрю на этот модуль! - person abritez; 02.01.2014