Mongoose JS findOne总是返回null

Bee*_*Inc 6 javascript mongoose mongodb node.js

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

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);
});
Run Code Online (Sandbox Code Playgroud)

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

错误:null

用户:null

当调用connect方法时,我看到与Mongo实例的连接,但是当发出findOne命令时,似乎没有任何事情发生.如果我通过MongoDB shell运行相同的命令,我会将用户记录返回给我.有什么我做错了吗?

提前致谢.

Nei*_*unn 11

Mongoose将模型的名称复数化,因为它认为这种良好的做法可以使事物的"集合"成为复数名称.这意味着您目前在代码中寻找的是一个名为"用户"的集合,而不是您所期望的"用户".

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

var userModel = mongoose.model('user', userSchema, 'user');
Run Code Online (Sandbox Code Playgroud)

第三个参数是要使用的集合名称,而不是基于模型名称确定的集合名称.