복붙노트

[MONGODB] MongoDB를 찾을 () 및 findOne () 메소드는 다른 결과를 도시

MONGODB

MongoDB를 찾을 () 및 findOne () 메소드는 다른 결과를 도시

나는 사용자의 컬렉션 난 그냥 한 문서를 가지고 몽고 데이터베이스를 가지고있다. 내가 발견 ()와 사용자 이름 필터를 사용하여 findOne을 () 작업을 수행. 나는 내가 생각하는 발견 () 작업에서 잘못된 결과 얻을.

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

찾기 () 작업이 사용자가 진실하지 않은 존재 반환을 참조하십시오. findOne는 ()가 제대로 작동하고.

해결법

  1. ==============================

    1.우선, findOne (사이의 기본적인 차이) 찾아 () :

    우선, findOne (사이의 기본적인 차이) 찾아 () :

    그래서 경우에 넣으면 상태, findOne ()는 문서를 일치하지 않는 경우 false로 변환 할 수 있습니다. 발견이 커서 객체를 반환하고 널 (null)을 반환하지 않습니다 같은 경우 상태에 둘 때, true로 변환합니다.

    빈 컬렉션에 대한 다음을 반환) (찾아 findOne :

  2. ==============================

    2.당신이 자신을 찾을 함정은 몽고 쉘에서 오히려 문서화되지 않은 변환이 자바 스크립트 논리 값에 객체입니다 :

    당신이 자신을 찾을 함정은 몽고 쉘에서 오히려 문서화되지 않은 변환이 자바 스크립트 논리 값에 객체입니다 :

    findOne ()는 문서를 반환하거나 전무 / 널 /이 - 무엇이든 - 소위

    () 비어있을 수 커서를 반환 찾을 수 있습니다. 그러나 반환되는 객체는 항상 정의됩니다.

  3. ==============================

    3.'찾기 () 메소드는 쿼리 기준 문서를 일치하지 않는 경우에도 항상 truthy되는 커서를 반환합니다.

    '찾기 () 메소드는 쿼리 기준 문서를 일치하지 않는 경우에도 항상 truthy되는 커서를 반환합니다.

    한편, findOne은 지정된 기준과 일치하는 모든 문서가없는 경우 쿼리 기준 또는 null (자바 스크립트 또는 언어 드라이버에 해당하는)과 일치하는 첫 번째 문서를 반환합니다.

    > db.dropDatabase()
    { "dropped" : "test", "ok" : 1 }
    > var cursor = db.collection.find();
    > cursor;
    > typeof cursor;
    object
    > !cursor;
    false
    > var document = db.collection.findOne();
    > document;
    null
    > typeof document;
    object
    > !document;
    true
    
  4. ==============================

    4.어쩌면 발견은 부울 검사에 대한 올바른 후보는 부울에서 사실로 통과 빈 커서를 반환 데이터가없는 경우에도하지 않습니다

    어쩌면 발견은 부울 검사에 대한 올바른 후보는 부울에서 사실로 통과 빈 커서를 반환 데이터가없는 경우에도하지 않습니다

    if (db.users.find({username : "noSuchUsername"}).toArray().length>0) {
    ... print ("Username exists"); 
    ... } else {
    ... print ("User does not exist"); }
    

    또는

       if (db.users.find({username : "noSuchUsername"}).size()>0) {
        ... print ("Username exists"); 
        ... } else {
        ... print ("User does not exist"); }
    

    데이터가이 부울 검사에서 거짓으로 패스를 돌려줍니다 발견되지 않는 경우 findOne 제대로 때문에 노력하고 있습니다.

  5. from https://stackoverflow.com/questions/40168478/find-and-findone-methods-in-mongodb-showing-different-results by cc-by-sa and MIT license