当前位置: 首页 > 面试题库 >

猫鼬JS findOne总是返回null

凤伟泽
2023-03-14
问题内容

我一直在努力让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);
});

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

错误:空

用户名:null

当调用connect方法时,我看到与我的Mongo实例建立了连接,但是当执行findOne命令时,似乎没有任何反应。如果我通过MongoDB
Shell运行相同的命令,则会得到用户记录。我做错了什么吗?

提前致谢。


问题答案:

猫鼬将模型的名称复数化,因为它认为事物的“集合”的优良作法是复数名称。这意味着您当前在代码中寻找的是一个称为“用户”的集合,而不是您期望的“用户”。

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

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

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



 类似资料:
  • 问题内容: 我有一个使用名为Todo的模型的路由设置,如下所示: 但是,todos.length始终为0,因为它找不到任何结果。当我跑步时: 我确定我已连接到同一数据库。我可以在mongod控制台中看到连接。我的连接位于config / db.js文件中: 我的server.js中的连接如下: 在Mongo Shell中,我得到1个结果。我期望此结果将由find查询返回。有什么我想念的吗?我正在使

  • 问题内容: 我正在研究猫鼬在mongodb中的数据库中列出一个集合中的所有数据: 根据要求: 我正在执行以下代码: 我已经在数据库中输入了条目,但是上面的代码返回了空值。为什么? 编辑:以下代码也返回空: 使用的架构: 问题答案: 您的问题是猫鼬将集合复数。猫鼬正在查询“组织”,但您的数据在mongodb中为“组织”。使它们匹配,您应该很好。您可以通过mongoshell在mongodb中对其重命

  • 问题内容: 在Node.js中使用Mongoose,您可以使用find返回一些字段。例如。 但我似乎无法弄清楚如何使用findOneAndUpdate返回某些字段。 有人做到过吗?我在文档中找不到它。 问题答案: 从说明书,该参数需要一个关键的它,因为还有其他的细节,比如和地方适用。您 还 需要以下选项: 您也可以使用 请注意,没有返回的文档处于处理更新修改 之前 的状态。有时候这就是您的意思,但

  • 问题内容: 我有这个电话: 我在哪里指定要返回的属性?在文档中找不到它。以上返回整个对象。我只希望返回一些属性。 这是我的架构: 我不想在我的休息电话中包含项目数组。 问题答案: 您使用投影。猫鼬查询文档中的第一个示例具有投影操作。 注意:不是真正的代码b / c,我用三颗星突出显示了重要的部分 该方案没有规定,但我认为例子是再清楚不过。

  • 问题内容: 这是我的图式 但是当我: 我得到了,虽然它应该返回 实际上,如果我去查询它,我会得到: 问题答案: 要使用嵌入式子文档(如)中命名的字段,您必须使用显式定义,否则Mongoose会感到困惑:

  • 问题内容: 我有一个我以前从未见过的问题,猫鼬的findByIdAndUpdate没有在回调中返回正确的模型。 这是代码: 数据库中的原始文档如下所示: 进入的updateObj如下所示: 从回调返回的模型与原始模型相同,而不是updatedObj。如果我查询数据库,它已正确更新。它只是没有从数据库中返回。 这感觉像是一个“愚蠢的用户”错误,但我看不到它。任何想法表示赞赏。 问题答案: 在Mong