Mongoose JS findOne 总是 returns null

Mongoose JS findOne always returns null

我一直在努力从我的本地 Mongo 数据库实例中获取 Mongoose 到 return 数据;我可以 运行 在 MongoDB shell 中执行相同的命令,然后得到结果。我在 Whosebug 上找到了一个 post,它讨论了我遇到的确切问题 here;我已经按照 post 上的答案进行操作,但似乎仍然无法正常工作。我创建了一个简单的项目来尝试让一些简单的东西工作,这是代码。

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 运行 相同的命令,我会得到用户记录 returned 给我。我做错了什么吗?

提前致谢。

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

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

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

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

我知道 7 年过去了,但是我开始使用 mongoose MongoDB 在节点 JS 中进行开发,因此寻找相同问题的解决方案,result = null. 阅读此 post 和所有答案后,我宣布我完全忘记在连接字符串 'mongodb://localhost:27017/DB name' 中包含 DB 名称 这样就解决了我的问题案件。我猜这可以帮助像我这样的其他无能者! :)