복붙노트

[MONGODB] 어떻게 당신이 질의 할 몽고에서 "null가 아닌"?

MONGODB

어떻게 당신이 질의 할 몽고에서 "null가 아닌"?

나는 다음과 같은 쿼리를 실행하고 싶습니다 :

db.mycollection.find(HAS IMAGE URL)

올바른 구문은 무엇을해야 하는가?

해결법

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

    1.이것은 "이미지 URL"라는 키를 사용하여 모든 문서를 반환합니다,하지만 그들은 여전히 ​​널 값을 가질 수있다.

    이것은 "이미지 URL"라는 키를 사용하여 모든 문서를 반환합니다,하지만 그들은 여전히 ​​널 값을 가질 수있다.

    db.mycollection.find({"IMAGE URL":{$exists:true}});
    

    이것은 "이미지 URL"라는 키와 null이 아닌 값 모두 모든 문서를 반환합니다.

    db.mycollection.find({"IMAGE URL":{$ne:null}});
    

    또한, 문서에 따르면, $ 인덱스를 사용할 수 없습니다 현재 존재하지만, $ NE는 할 수 있습니다.

    편집 : 때문에이 답변에 대한 관심에 몇 가지 예제를 추가

    이러한 삽입을 감안할 때 :

    db.test.insert({"num":1, "check":"check value"});
    db.test.insert({"num":2, "check":null});
    db.test.insert({"num":3});
    

    이 세 가지 문서를 반환합니다 :

    db.test.find();
    

    이것은 제 1 및 제 2 문서 만 반환합니다 :

    db.test.find({"check":{$exists:true}});
    

    이것은 첫 번째 문서 만 반환합니다 :

    db.test.find({"check":{$ne:null}});
    

    이 두 번째와 세 번째 문서 만 반환합니다 :

    db.test.find({"check":null})
    
  2. ==============================

    2.하나 라이너는 최고입니다 :

    하나 라이너는 최고입니다 :

    db.mycollection.find({ 'fieldname' : { $exists: true, $ne: null } });
    

    이리,

    mycollection : 원하는 컬렉션 이름을 배치

    필드 이름 : 원하는 필드 이름을 배치

    Explaination :

    $가 존재 : true 인 경우, $가 존재하는 필드 값이 null의 문서를 포함하는 필드를 포함하는 문서를 일치합니다. false의 경우, 쿼리가 반환하는 필드를 포함하지 않는 문서 만.

    $ NE가 선택 필드의 값이 지정된 값과 동일하지 않은 서류. 이 필드를 포함하지 않는 문서가 포함되어 있습니다.

    그래서 제공하는 경우 쿼리 이미지 URL 필드가 존재하지 null 값을 갖는 모든 문서를 반환하려고 다음

    db.mycollection.find({ 'imageurl' : { $exists: true, $ne: null } });
    
  3. ==============================

    3.당신이 사용할 수있는 pymongo에서 :

    당신이 사용할 수있는 pymongo에서 :

    db.mycollection.find({"IMAGE URL":{"$ne":None}});
    

    pymongo 파이썬 "없음"으로 몽고 "널 (null)"을 나타 내기 때문이다.

  4. ==============================

    4.db.collection_name.find ({ "filed_name는": {$가 존재 : TRUE}});

    db.collection_name.find ({ "filed_name는": {$가 존재 : TRUE}});

    심지어이 null이 filed_name가 포함 된 문서를 가져옵니다.

    나의 제안 :

    db.collection_name.find({"field_name":{$type:2}}) //type:2 == String
    

    당신은 그것이 아무것도 반환되지 않도록 유형 조건이 일치하지 않는 NULL의 경우는 그렇지 않으면의 신청 유형에 확인되기 때문에 쿼리의 FIELD_NAME에 값이 포함 된 모든 문서를 반환합니다 필요한 속성의 형태를 확인할 수 있습니다.

    N.b는 다음 FIELD_NAME 어떤 수단 ""빈 문자열이있는 경우, 그것은 returned.It가 같은 동작입니다 될 것입니다 db.collection_name.find ({ "filed_name": {$ NE : 널 (null)}});

    추가 확인 :

    좋아, 그래서 우리는 우리가 추가 조건을 필요로 아직 완료되지 않습니다.

    db.collection_name. 찾기 ({ "FIELD_NAME": {$ 유형 : 2} $ 여기서 "this.field_name.length> 0"})

    또는

    db.collection_name. 찾기 ({ "FIELD_NAME": {$ NE : 널 (null)}, $ 여기서 "this.field_name.length> 0"})

    모든 유형의 참조 : https://docs.mongodb.com/manual/reference/operator/query/type/#op._S_type

  5. ==============================

    5.우리 (쿼리 MongoDB의 나침반에서 실행) 근무이 쿼리 :

    우리 (쿼리 MongoDB의 나침반에서 실행) 근무이 쿼리 :

    {
      "fieldName": {
        "$nin": [
          "",
          null
        ]
      }
    }
    
  6. ==============================

    6.

    db.<collectionName>.find({"IMAGE URL":{"$exists":"true"}, "IMAGE URL": {$ne: null}})
    
  7. ==============================

    7.언급되지 않은 다른,하지만 일부에 대한보다 효율적인 옵션이 될 수는 (것이다 NULL 항목하지 작업) 스파 스 인덱스 (현장에서 무언가가있을 때 인덱스의 항목 만 존재)를 사용하는 것입니다. 여기서 샘플 데이터 세트이다 :

    언급되지 않은 다른,하지만 일부에 대한보다 효율적인 옵션이 될 수는 (것이다 NULL 항목하지 작업) 스파 스 인덱스 (현장에서 무언가가있을 때 인덱스의 항목 만 존재)를 사용하는 것입니다. 여기서 샘플 데이터 세트이다 :

    db.foo.find()
    { "_id" : ObjectId("544540b31b5cf91c4893eb94"), "imageUrl" : "http://example.com/foo.jpg" }
    { "_id" : ObjectId("544540ba1b5cf91c4893eb95"), "imageUrl" : "http://example.com/bar.jpg" }
    { "_id" : ObjectId("544540c51b5cf91c4893eb96"), "imageUrl" : "http://example.com/foo.png" }
    { "_id" : ObjectId("544540c91b5cf91c4893eb97"), "imageUrl" : "http://example.com/bar.png" }
    { "_id" : ObjectId("544540ed1b5cf91c4893eb98"), "otherField" : 1 }
    { "_id" : ObjectId("544540f11b5cf91c4893eb99"), "otherField" : 2 }
    

    이제, 이미지 URL 필드에 스파 스 인덱스를 만들 :

    db.foo.ensureIndex( { "imageUrl": 1 }, { sparse: true } )
    {
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 1,
        "numIndexesAfter" : 2,
        "ok" : 1
    }
    

    지금, 거기에 항상 기회를 (그리고 내 샘플 같은 작은 데이터 집합 특히) 대신 인덱스를 사용하는 것보다, MongoDB를도 잠재적 인 커버 드 인덱스 쿼리, 테이블 스캔을 사용하는 것이다. 그것이 나오는 것에 따라 그것은 나에게 여기의 차이를 설명 할 수있는 쉬운 방법을 제공합니다 :

    db.foo.find({}, {_id : 0, imageUrl : 1})
    { "imageUrl" : "http://example.com/foo.jpg" }
    { "imageUrl" : "http://example.com/bar.jpg" }
    { "imageUrl" : "http://example.com/foo.png" }
    { "imageUrl" : "http://example.com/bar.png" }
    {  }
    {  }
    

    어떤 이미지 URL로 추가 문서가 반환되도록 OK, 단지 우리가 원하지 않는 무엇을 비 웁니다. 그냥 확인하는 이유, Explain 스를 수행합니다

    db.foo.find({}, {_id : 0, imageUrl : 1}).explain()
    {
        "cursor" : "BasicCursor",
        "isMultiKey" : false,
        "n" : 6,
        "nscannedObjects" : 6,
        "nscanned" : 6,
        "nscannedObjectsAllPlans" : 6,
        "nscannedAllPlans" : 6,
        "scanAndOrder" : false,
        "indexOnly" : false,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "millis" : 0,
        "server" : "localhost:31100",
        "filterSet" : false
    }
    

    그래서, 예, BasicCursor는 인덱스를 사용하지 않은, 테이블 스캔 같습니다. 하자가 힌트 () 우리의 스파 스 인덱스를 사용하는 쿼리를 강제로 :

    db.foo.find({}, {_id : 0, imageUrl : 1}).hint({imageUrl : 1})
    { "imageUrl" : "http://example.com/bar.jpg" }
    { "imageUrl" : "http://example.com/bar.png" }
    { "imageUrl" : "http://example.com/foo.jpg" }
    { "imageUrl" : "http://example.com/foo.png" }
    

    반환되는 인구 분야와 문서 만 - 우리가 찾고 있던 결과가있다. 이것은 또한 결과만을 반환 메모리 판정하므로 인덱스 만 요구 인덱스 (즉 그것이 덮여 인덱스 쿼리)를 사용한다.

    이 전문 유스 케이스이며, (그 옵션에 대한 다른 답변을 참조) 일반적으로 사용할 수 없습니다. 특히이 일이이 방법으로 수를 ()를 사용할 수 없습니다 스탠드로 적절한 경우, 그래서에만 사용하십시오 (내 예를 들어이 6하지 4가 반환됩니다) 주목해야한다.

  8. ==============================

    8.이상적인 경우에, 당신은 "모든 세 가지 값에 대한 테스트, null로 싶습니다"또는 (레코드에 필드 나던 존재를) 비워

    이상적인 경우에, 당신은 "모든 세 가지 값에 대한 테스트, null로 싶습니다"또는 (레코드에 필드 나던 존재를) 비워

    다음을 수행 할 수 있습니다.

    db.users.find ({$가와 : [{ "이름": {$ 닌 : [ "", null가]}}, { "이름": {$가 존재 : TRUE}}]})

  9. ==============================

    9.쿼리가 될 것인가

    쿼리가 될 것인가

    db.mycollection.find({"IMAGE URL":{"$exists":"true"}})
    

    그것은 키로 "이미지 URL"을 가진 모든 문서를 반환합니다 ...........

  10. from https://stackoverflow.com/questions/4057196/how-do-you-query-for-is-not-null-in-mongo by cc-by-sa and MIT license