Mongoose的多层次人口不起作用

时间:2014-10-19 18:07:11

标签: node.js mongodb mongoose

我有三个模型,程序(程序),层(Tier),商品(Offer)。一个程序可以有多个层,一个层可以有多个提供。所以我的程序有一系列层,相应的层可以有一系列的报价。现在我尝试按如下方式填充程序:

var Program = mongoose.model('Program');
var Offer = mongoose.model('Offer');
var Tier = mongoose.model('Tier');

Program.findOne({
        _id: p_id
    }).populate('tiers').exec(function(err, docs){
        var opts = {
            path: 'tiers.offers'
        }
        Program.populate(docs, opts, function(err, docs){
            console.log('populated');
//          var s = require('util').inspect(docs, {depth : null})
            console.log(docs);
            console.log(docs.tiers[0]); //Printing complete tier information
            console.log(docs.tiers[0].offers[0]) //Just printing Object ID, not taking data from offers table
        })
    })

问题是它只是填充层而不是提供。我该怎么走得更深?相应的例子在这里:

https://github.com/paulcsmith/mongoose-currency/blob/master/node_modules/mongoose/examples/population-across-three-collections.js

1 个答案:

答案 0 :(得分:1)

我有类似的问题,我有一首混音(下一首歌)和艺术家。在这里,我首先找到了这首歌的名字,然后我填写下一首歌曲以及他们的艺术家,接下来的歌曲我填充歌曲和艺术家信息。

希望它有所帮助。

Song.find({songName: req.params.id})
  .lean()
  .populate({ path: 'songMixs songArtist' })
  .exec(function(err, docs) {

    var options = {
      path: 'songMixs.nextSong',
      model: 'Song'
    };

    if (err) return res.json(500);
    Song.populate(docs, options, function (err, projects) {

        var options2 = {
            path: 'songMixs.nextSong.songArtist',
            model: 'Artist'
        };

        Artist.populate(docs, options2, function (err, projects) {
            res.json(projects);
        });
        //res.json(projects);
    });
  });