mongodb - MongoDB 中的 find() 和 findOne() 方法显示不同的结果

标签 mongodb mongodb-query

我有一个 Mongo 数据库,在用户集合中我只有 1 个文档。
我使用用户名过滤器执行 find()findOne() 操作。
我从 find() 操作中得到了我认为不正确的结果。

MongoDB shell version: 3.2.10
connecting to: test
Server has startup warnings: 
2016-10-20T20:37:32.681-0700 I CONTROL  [initandlisten] 
2016-10-20T20:37:32.681-0700 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/enabled is 'always'.
2016-10-20T20:37:32.681-0700 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-10-20T20:37:32.681-0700 I CONTROL  [initandlisten] 
2016-10-20T20:37:32.681-0700 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2016-10-20T20:37:32.681-0700 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
2016-10-20T20:37:32.681-0700 I CONTROL  [initandlisten] 
> use lab2
switched to db lab2
> db.users.find()
{ "_id" : ObjectId("5807ac0765f24dd0660e4332"), "username" : "avtrulzz", "fname" : "Abc", "lname" : "Def", "email" : "test@yahoo.co.in", "password" : "rootuser", "mobile" : NumberLong(1234567890) }
> db.users.findOne()
{
    "_id" : ObjectId("5807ac0765f24dd0660e4332"),
    "username" : "avtrulzz",
    "fname" : "Abc",
    "lname" : "Def",
    "email" : "test@yahoo.co.in",
    "password" : "rootuser",
    "mobile" : NumberLong(1234567890)
}
> if (db.users.find({username : "noSuchUsername"})) {
... print ("Username exists"); 
... } else {
... print ("User does not exist"); }
Username exists
> if (db.users.findOne({username : "noSuchUsername"})) { print ("Username exists");  } else { print ("User does not exist"); }
User does not exist
> if (db.users.findOne({username : "avtrulzz"})) { print ("Username exists");  } else { print ("User does not exist"); }
Username exists



看到 find() 操作返回用户存在,这是不正确的。 findOne() 行为正确。 enter image description here

最佳答案

首先,findOne()之间的基本区别和 find() :

  • findOne() - 如果查询匹配,则返回第一个文档,否则返回 null。
  • find() - 无论匹配的文档数量如何,都会返回一个游标,永远不会为空。

  • 所以当放入 if 条件时,findOne()当它不匹配任何文档时可以转换为 false。如 find()返回一个游标对象并且从不返回 null,当放入 if 条件时将转换为 true。findfindOne()为空集合返回以下内容:
    enter image description here

    关于mongodb - MongoDB 中的 find() 和 findOne() 方法显示不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40168478/

    相关文章:

    linux - 无法在 Ubuntu 16.10 上启动 MongoDB

    java - 如何使用 Spring Boot 按顺序检索从 MongoDB 中的 ArrayList 传递的对象列表?

    python - PYMONGO - 如何将查询 $in 运算符与 MongoID 一起使用?

    javascript - MongoDB 嵌套查询仅返回最后出现的结果

    node.js - 在node.js-mongodb中分组

    ruby - 如何查找所有没有数组或小于数组的文档

    javascript - MongoDB - 列表中每个 ID 的最新项目

    javascript - MongoDB 将 [{k1 :v1}, {k2:v2}] 转换为 {v1: v2}

    mongodb - Mongoose 不会删除嵌入的文档

    mongodb - 如何从 groovy/grails 查询 mongodb?