Następujący TypeError pojawił się w starym kodzie.Mongoose TypeError na modelu findOne method
TypeError: Object #<Object> has no method 'findOne'
Model, który miał ostatnio wpływ, miał zdefiniowane dwie nowe statyczne metody i metody odwołujące się do modeli zewnętrznych. Po wycofaniu nowych metod statycznych udało mi się ustalić podstawową przyczynę, która jest wymaganiami instrukcji zewnętrznych modeli. Wzór wygląda następująco:
var UserModel = require('./user');
var GroupSchema = new Schema({
name: String,
users: [{ type : Schema.ObjectId, ref: 'UserModel'}],
});
GroupSchema.statics.findSomeUsers = function(group, callback) {
this.find({name : session_user._id}, function(err, groups) {
UserModel.find({_id : {$in : group.users}}, function(err,patients) {
// do magic
});
});
};
module.exports = mongoose.model('GroupModel', GroupSchema);
Jest to fragment kodu w aplikacji, która wywołuje GroupModel.findOne ({name: 'gogo'}), która prowadzi do TypeError. po usunięciu instrukcji require dla UserModel w GroupSchema, kod aplikacji działa ponownie.
Dlaczego Javascript zaczyna myśleć, że findOne() jest metodą instancji z dodatkiem instrukcji require?
./user.js jest miejscem zdefiniowania UserModel. Tam nie ma potrzeby. Nie rozumiem twojej odpowiedzi - var UserModel = mongoose.model ("UserModel") - nie działa, ponieważ nie wie, czym jest Schemat (który jest zdefiniowany w user.js). – Greg
usuń wymaganie i zmień UserModel.findOne() na mongoose.model ("UserModel"). FindOne() – Greg
Czy zdefiniowałeś 'UserModel' w' './User''? Smth jak 'module.exports = mongoose.model (" UserModel ", UserSchema);'? Jeśli tak, to 'mongoose.model ('UserModel')' powinno działać poprawnie. Jeśli chodzi o pętle, nie jestem pewien, że to twoja sprawa, ale wygląda na to. –