当前位置: 首页 > 知识库问答 >
问题:

Mongoose查询findOne({params})返回null,即使它在mongo shell中成功了?

赵锐
2023-03-14

以下是正在使用的软件版本:

  • 猫鼬4.10.8,
  • MongoDB 3.4,
  • Express 4.13.4,
  • NodeJS 6.11.1,
  • NPM 3.10.10,
> db.users.findOne({"admin":"true"}).pretty()

>{
        "_id" : ObjectId("..."),
        "updatedAt" : ISODate("2017-08-15T06:08:24.742Z"),
        "createdAt" : ISODate("2017-08-03T03:11:23.653Z"),
        "salt" : "...",
        "hash" : "...",
        "username" : "Testuser",
        "notifications" : [
                {
                }
        ],
        "lastname" : "Administrator",
        "firstname" : "Webmaster",
        //********* FIELD I AM SEARCHING FOR HERE!
        "admin" : "true",
        "companyName" : "",
        "__v" : 11,
        "company" : ObjectId("59868130522b9a0fe05808c7")
}
>
>Users.findOne({"admin":"true"}, "username", function (err, admin) { do stuff here});

在另一种使用中,我使用users.findbyid,得到的结果没有问题。所以我知道这不是访问db的问题,也不是模式的问题。我甚至在没有搜索参数的情况下使用了findOne,并且能够找到我的用户(这是数据库中的第一个)。我快疯了。有人有什么建议吗?我只是不知道我还能尝试什么...

供参考的user.js模式

var mongoose                = require('mongoose');
var Schema                  = mongoose.Schema;
var passportLocalMongoose   = require('passport-local-mongoose');

var Notification = new Schema({
    body: {type: String, default: ''}
}, {timestamps:true});


var User = new Schema({

    //Is this user an admin? 
    admin: {type: Boolean, default: false},
    firstname: { type: String, default: ''},
    lastname: { type: String, default: ''},
    //Array of all the notifications for this user
    notifications: [Notification]

}, {timestamps: true});


User.plugin(passportLocalMongoose);
module.exports = mongoose.model('User', User);

共有1个答案

傅峻
2023-03-14

答案由Neil Lunn提供...实际存储在我的数据库中的数据是{“admin”:“true”}...其中admin字段是一个字符串值。现在,在mongoose模式中,我将该字段设置为布尔值,因此当我查找({“admin”:“true”})时,它将自动将“true”字符串值转换为真正的布尔值,因此永远找不到匹配项,因为“true”!=true。出现此问题是因为我使用mongodb shell手动将该字段设置为“true”;所以我可以创建一个管理用户。Mongoose默认情况下,根据我的模式,将该值设置为false。

 类似资料:
  • 为了学习平均堆栈(使用Mongoose),我创建了一个StackOverflow类型的应用程序。我有存储在Mongo(v3.0.7)中的问题,它们有答案子文档。 我试图增加一个答案的投票数,但当问题返回时,它是空的。我非常肯定查询有问题,特别是我试图用需要修改的ID得到答案的地方。 查询0票有效: 更新:通过Mongo查询,返回结果: 但是,通过Mongoose返回NULL:

  • 我正在使用JDBC创建一个数据库,其中包含表和。两者都有一个名为 以下是我创建和填充表的SQL语句: 我试图运行以下查询: 或 或 使用 但是我没有得到任何结果。 这两个问题都可以解决。 SQLite数据库服务器显示相同的问题: 它与Firefox中的SQLite Manager一起工作。

  • 我正在尝试使用JDBC连接到DB2数据库。JDBC连接成功,但在执行查询时,它返回Exception。在进一步分析时,返回以下错误: 错误代码-30025本地化错误消息->;DSN12015:*:V12R1M502;0600;0002 任何能在这方面指导我的人都将是一个很大的帮助! 当使用Tomcat在服务器中运行相同的Eclipse时,将返回相同的错误(404)。

  • 问题内容: 我一直在努力让Mongoose从本地MongoDB实例返回数据。我可以在MongoDB Shell中运行相同的命令,然后返回结果。我在stackoverflow上找到了一篇帖子,谈论我在这里遇到的确切问题; 我已经遵循了这篇文章的答案,但是我似乎仍然无法正常工作。我创建了一个简单的项目,试图使事情变得简单,这是代码。 这是2 console.log语句的响应: 错误:空 用户名:nul

  • 我想知道是否有任何方法可以更改由猫鼬,和方法返回的文档对象的可用字段的值,并通过应用到数据库中的更改来更新它们。下面的代码片段是我期望完成我想要的工作:

  • Firebase查询返回此查询的值 该项由model类捕获 但是,返回null