1

自己参照モデルを再帰的に数回入力しようとしています。ここに私のスキーマがあります:

var TestSchema = new Schema({
  title: { type: String },
  counter: { type: Number },
  children: [ { type: Schema.Types.ObjectId, ref: 'test' } ]
});
var models = {
  Test: mongoose.model('test', TestSchema)
};

これまでのところ、この機能するコードはすべてを 1 つのレベルに取り込みます。

models.Test.find().populate('children').exec(function(err, doc) {
  if (err)
    res.send(err);
  else {
    res.send(doc);
  }     });

しかし、次のようなことをしようとすると:

models.Test.find().populate('children').populate('children.children').exec(function(err, doc) {

あるいは:

models.Test.find().populate('children').exec(function(err, doc) {
  if (err)
    res.send(err);
  else {
    models.Test.populate(doc, 'children.children', function(err, doc) {
       res.send(doc);
    });
  }
});

次のエラーが表示されます。

TypeError: Cannot call method 'path' of undefined
    at search (..../api/node_modules/mongoose/lib/model.js:2059:28)
    at search (..../api/node_modules/mongoose/lib/model.js:2078:22)
    at Function._getSchema (..../api/node_modules/mongoose/lib/model.js:2085:5)
    at populate (..../api/node_modules/mongoose/lib/model.js:1706:22)
    at Function.Model.populate (..../api/node_modules/mongoose/lib/model.js:1686:5)
    at Promise.<anonymous> (..../api/api.js:22:19)
    at Promise.<anonymous> (..../api/node_modules/mongoose/node_modules/mpromise/lib/promise.js:162:8)
    at Promise.EventEmitter.emit (events.js:95:17)
    at Promise.emit (..../api/node_modules/mongoose/node_modules/mpromise/lib/promise.js:79:38)
    at Promise.fulfill (..../api/node_modules/mongoose/node_modules/mpromise/lib/promise.js:92:20)

mongoose 3.6のリリース ノートには、Model.populate を使用してディープ ポピュレートが許可されていると書かれていますが、エラーが発生しています。誰が何が起こっているのか知っていますか?

4

1 に答える 1