【问题标题】:Mongoose JS findOne always returns nullMongoose JS findOne 总是返回 null
【发布时间】:2015-04-30 22:08:54
【问题描述】:

我一直在努力让 Mongoose 从我的本地 MongoDB 实例返回数据;我可以在 MongoDB shell 中运行相同的命令并返回结果。我在 stackoverflow 上找到了一篇关于我遇到的确切问题 here 的帖子;我已经按照这篇文章的答案进行了操作,但似乎仍然无法正常工作。我创建了一个简单的项目来尝试让一些简单的工作,这里是代码。

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var userSchema = new Schema({
    userId: Number,
    email: String,
    password: String,
    firstName: String,
    lastName: String,
    addresses: [
        {
            addressTypeId: Number,
            address: String,
            address2: String,
            city: String,
            state: String,
            zipCode: String
        }
    ],
    website: String,
    isEmailConfirmed: { type: Boolean, default: false },
    isActive: { type: Boolean, default: true },
    isLocked: { type: Boolean, default: false },
    roles: [{ roleName: String }],
    claims: [{ claimName: String, claimValue: String }]
});

var db = mongoose.connect('mongodb://127.0.0.1:27017/personalweb');
var userModel = mongoose.model('user', userSchema);

userModel.findOne({ email: 'test@test.com' }, function (error, user) {
    console.log("Error: " + error);
    console.log("User: " + user);
});

这是 2 个 console.log 语句的响应:

错误:空

用户:空

当调用 connect 方法时,我看到正在与我的 Mongo 实例建立连接,但是当发出 findOne 命令时,似乎什么也没发生。如果我通过 MongoDB shell 运行相同的命令,我会得到返回给我的用户记录。是不是我做错了什么?

提前致谢。

【问题讨论】:

    标签: javascript node.js mongodb mongoose


    【解决方案1】:

    Mongoose 将模型名称复数化,因为它认为“集合”事物的这种良好做法是复数名称。这意味着您当前在代码中查找的内容是一个名为“users”的集合,而不是您可能期望的“user”。

    您可以通过在模型定义中指定所需集合的特定名称来覆盖此默认行为:

    var userModel = mongoose.model('user', userSchema, 'user');
    

    第三个参数是要使用的集合名称,而不是根据模型名称确定的名称。

    【讨论】:

    • 好的,我试过了,但我的用户变量仍然为空。除了逐行遍历代码之外,我还能做些什么来调试出了什么问题?
    • @CodeMonkey 你在“MongoDB shell”中到底在做什么?这里明显的调用是,如果你不知道,那么这个集合是由 mongoose 复数的。唯一的另一件事是,你显然没有像你说的那样做“同样的事情”。
    • 我通过 Mongo shell 发出的命令是 db.User.findOne({email: 'test@test.com'});这不是 mongoose 发送的命令吗?
    • 我让它工作了......我需要大写“用户”;在我这样做之后它返回了结果。感谢您的所有帮助@Neil
    • 在文档中不清楚。小猫的例子只是分散注意力。
    猜你喜欢
    • 2016-02-10
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 1970-01-01
    • 2016-07-14
    • 2018-07-07
    相关资源
    最近更新 更多