您可以在Mongoose中使用实例方法搜索其他模型吗?

EAR*_*ram 2 javascript mongoose mongodb node.js express

模型什么时候收到原型?

我知道在这里嵌入通常是答案,但是我有一个特殊情况。

如果我用实例的自定义方法调用另一个模型,它似乎会失败。

我得到的错误:

Fish.find is not a function at model.UserSchema.methods.fishes
Run Code Online (Sandbox Code Playgroud)

Fish模型被制成模型:

    // Require mongoose to create a model.
var mongoose = require('mongoose'),
    User     = require('./user.js');

// Create a schema of your model
var fishSchema = new mongoose.Schema({
  name:       String,
  category:   String,
  user:       { type: mongoose.Schema.Types.ObjectId, ref:'User' }
});

// Create the model using your schema.
var Fish = mongoose.model('Fish', fishSchema);

// Export the model of the Fish.
module.exports = Fish;
Run Code Online (Sandbox Code Playgroud)

用户模型在fishes自定义实例方法中调用Fish模型:

var mongoose     = require('mongoose'),
    Schema       = mongoose.Schema,
    bcrypt       = require('bcrypt-nodejs'),
    Fish         = require('./fish');

//||||||||||||||||||||||||||--
// CREATE USER SCHEMA
//||||||||||||||||||||||||||--
var UserSchema   = new Schema({
  name:        { type: String, required: true },
  phoneNumber: {
                 type: String,
                 required: true,
                 index: { unique: true },
                 minlength: 7,
                 maxlength: 10
  },
  password:    { type: String, required: true, select: false }
});


// … some bcrypt stuff…

// Access user's fishes - THIS IS WHAT'S MESSING UP!!
UserSchema.methods.fishes = function(callback) {
  Fish.find({user: this._id}, function(err, fishes) {
    callback(err, fishes);
  });
};

module.exports = mongoose.model('User', UserSchema);
Run Code Online (Sandbox Code Playgroud)

当我调用.fishes()种子时,它声称Fish.find不是函数。

为什么!?任何帮助将不胜感激!

rob*_*lep 7

问题是循环导入(fish.jsrequires user.js,requires fish.js等)。

您可以通过在运行时解析模型类来解决此问题:

UserSchema.methods.fishes = function(callback) {
  mongoose.model('Fish').find({user: this._id}, function(err, fishes) {
    callback(err, fishes);
  });
};
Run Code Online (Sandbox Code Playgroud)