Mongoose JS findOne总是返回null

我一直在努力让Mongoose从我的本地MongoDB实例返回数据; 我可以在MongoDB shell中运行相同的命令,并返回结果。 我已经在stackoverflow上find一个post,谈论我在这里的确切问题; 我已经按照这个post的答案,但我似乎无法得到它的工作。 我创build了一个简单的项目来尝试和简单的工作,这里的代码。

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语句的响应:

错误:null

用户:空

当连接方法被调用,我看到连接到我的Mongo实例,但是当findOne命令发出什么都不会发生。 如果我通过MongoDB shell运行相同的命令,我得到的用户logging返回给我。 有什么我做错了吗?

提前致谢。

mongoose将模型的名字复数化,因为它认为这个好的做法是把事物“收集”成一个复数名称。 这意味着你正在寻找代码它是一个集合称为“用户”,而不是“用户”,如你所料。

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

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

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