javascript - 模型的 findOne 方法上的 Mongoose TypeError

标签 javascript node.js mongoose

以下 TypeError 出现在一些旧代码中。

TypeError: Object #<Object> has no method 'findOne'

最近受影响的模型定义了两个新的静态方法,这些方法引用了外部模型。退出新的静态方法后,我能够确定根本原因是外部模型的 require 语句。该模式如下所示:

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);

应用程序中有一个调用 GroupModel.findOne({name:'gogo'}) 的代码片段会导致 TypeError。当我删除 GroupSchema 中 UserModel 的 require 语句时,应用程序代码再次运行。

为什么 Javascript 开始认为 findOne() 是添加了 require 语句的实例方法?

最佳答案

这是已知的 node.js 问题。这意味着您在代码中的某处有循环要求,而 node.js 禁止它。

正确的方法是使用 mongoose.model 方法。因此,您应该使用 mongoose.model('UserModel') 而不是 UserModel 变量。因此,当调用 findSomeUsers 时,mondoose 将获取 UserModel 并调用其 find 方法。

GroupSchema.statics.findSomeUsers = function(group, callback) {
    this.find({name : session_user._id}, function(err, groups) {
        mongoose.model('UserModel').find({_id : {$in : group.users}}, function(err,patients) {
            // do magic
        });
    });
};

关于javascript - 模型的 findOne 方法上的 Mongoose TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14307953/

相关文章:

javascript - 我如何发送一些 HTML,渲染一个 View ,然后在 Express+Node.js 中发送更多的 HTML?

arrays - 如何在MongoDB中指定字段进行多条件查找查询?

mongodb - 从 MongoDB 下载图像文件

javascript - 有没有办法动态加载本地JS文件?

JavaScript 使用箭头键 move 图像

Node.js 路由发送到不正确的 Controller

node.js - MongoDB/Mongoose 聚合或 $or 未按预期工作?

javascript - 在 Node-webkit 中将 Canvas 保存到磁盘

javascript - 将日期函数从 javascript 转换为 php

node.js - npm 依赖解析 - 或者 - 帮助!我无法安装 derbyjs