0

ここに私のスキーマがあります:

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.
    }]
}

このコードは機能し、source_pages に正常に入力されます。

_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: 検索 (/home/sina/rhino2/node_modules/mongoose/lib/) で検索 (/home/sina/rhino2/node_modules/mongoose/lib/model.js:2088:28) で undefined のメソッド 'path' を呼び出せませんmodel.js:2107:22) Function._getSchema (/home/sina/rhino2/node_modules/mongoose/lib/model.js:2114:5) で populate (/home/sina/rhino2/node_modules/mongoose/lib/) でmodel.js:1719:22) 関数.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) で null。(/home/sina/rhino2/node_modules/mongoose/node_modules/mongodb/lib/mongodb/db.js:1641:20)

4

1 に答える 1

2

私はちょうど同じ問題を探していました。あなたが探しているのはこのMongoose: deep Population (populate a populated field)だと思います。

基本的に、コールバック関数で実行してからリターンに挿入しない限り、やろうとしていることを実行することはできません。私はそれを避けようとしていましたが、現時点ではそれが唯一の選択肢のようです. もう 1 つのオプションは、この種のことをたくさん行う予定がある場合は、リレーショナル DB の使用を検討することです。

于 2013-12-23T17:39:00.497 に答える