Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose-自引用深度填充错误_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoose-自引用深度填充错误

Javascript Mongoose-自引用深度填充错误,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我试图以递归的方式填充一个自引用模型几次。以下是我的模式: var TestSchema = new Schema({ title: { type: String }, counter: { type: Number }, children: [ { type: Schema.Types.ObjectId, ref: 'test' } ] }); var models = { Test: mongoose.model('test', TestSchema) }; 到目前为止,该

我试图以递归的方式填充一个自引用模型几次。以下是我的模式:

var TestSchema = new Schema({
  title: { type: String },
  counter: { type: Number },
  children: [ { type: Schema.Types.ObjectId, ref: 'test' } ]
});
var models = {
  Test: mongoose.model('test', TestSchema)
};
到目前为止,该功能代码将所有内容填充到一个级别:

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)
TypeError:无法调用未定义的方法“path”
搜索时(../api/node_modules/mongoose/lib/model.js:2059:28)
搜索时(../api/node_modules/mongoose/lib/model.js:2078:22)
at Function.\u getSchema(../api/node\u modules/mongoose/lib/model.js:2085:5)
at populate(..../api/node_modules/mongoose/lib/model.js:1706:22)
在Function.Model.populate(../api/node_modules/mongoose/lib/Model.js:1686:5)
答应。假设允许使用Model.populate进行深度填充,但这给了我一个错误。有人知道发生了什么吗?

指出第二个参数应该是一个选项对象,而不是字符串

以下是他们提供的示例:

User.findById(id, function (err, user) {
  var opts = [
      { path: 'company', match: { x: 1 }, select: 'name' }
    , { path: 'notes', options: { limit: 10 }, model: 'override' }
  ]

  User.populate(user, opts, function (err, user) {
    console.log(user);
  })
})
所以你的应该看起来像:

models.Test.find().populate('children').exec(function(err, doc) {
  if (err)
    res.send(err);
  else {
    var opts = [
      { path: 'children.children' }
    ];
    models.Test.populate(doc, opts, function(err, doc) {
       res.send(doc);
    });
  }
});