programing

Mongo에서 "not null"을 어떻게 조회합니까?

sourcetip 2023. 4. 2. 20:44
반응형

Mongo에서 "not null"을 어떻게 조회합니까?

다음 쿼리를 실행하고 싶습니다.

db.mycollection.find(HAS IMAGE URL)

올바른 구문은 무엇입니까?

이렇게 하면 "IMAGE URL"이라는 키를 가진 모든 문서가 반환되지만, 여전히 null 값을 가질 수 있습니다.

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

그러면 "IMAGE URL"이라는 키와 null이 아닌 값을 가진 모든 문서가 반환됩니다.

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

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

편집: 이 답변에 관심이 있어 몇 가지 예를 추가합니다.

다음과 같은 삽입물이 있습니다.

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

이렇게 하면 다음 세 가지 문서가 모두 반환됩니다.

db.test.find();

첫 번째 문서와 두 번째 문서만 반환됩니다.

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

첫 번째 문서만 반환됩니다.

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

이렇게 하면 두 번째 및 세 번째 문서만 반환됩니다.

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

라이너 1개가 가장 좋습니다.

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

여기서,

mycollection : 원하는 컬렉션 이름을 지정합니다.

fieldname : 원하는 필드 이름을 입력합니다.

설명:

$exists : true일 경우 $exists는 필드가 포함된 문서(필드 값이 null인 문서 포함)와 일치합니다.가 false일 경우 쿼리는 필드를 포함하지 않는 문서만 반환합니다.

$ne 필드 값이 지정된 값과 같지 않은 문서를 선택합니다.여기에는 필드가 포함되지 않은 문서가 포함됩니다.

따라서 제공된 경우 다음 쿼리는 imageurl 필드가 존재하며 null 값이 아닌 모든 문서를 반환합니다.

db.mycollection.find({ 'imageurl' : { $exists: true, $ne: null } });
db.collection_name.find({"filed_name":{$exists:true}});

null인 경우에도 이 field_name이 포함된 문서를 가져옵니다.

경고

db.collection_name.find({"filed_name":{$ne:null}});

field_name의 값이 $ne에서 null인 문서를 가져오지만 이 값은 빈 문자열일 수도 있습니다.

제안:

db.collection_name.find({ "field_name":{$ne:null},$where:"this.field_name.length >0"})

pymongo에서는 다음을 사용할 수 있습니다.

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

왜냐하면 피몽고는 몽고를 상징하기 때문이다.null매우None.

미래의 독자를 위한 공유.

이 쿼리는 우리에게 효과가 있었습니다(MongoDB 나침반에서 실행된 쿼리).

{
  "fieldName": {
    "$nin": [
      "",
      null
    ]
  }
}

이상적인 경우 null, " 또는 empty(레코드에 필드가 존재하지 않음)의 3가지 값을 모두 테스트합니다.

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

db.users.find({$and: [{"name" : {$nin: ["", null]}}, {"name" : {$exists: true}}]})

mongo 나침반에서 컬럼의 존재를 확인하는 가장 간단한 방법은 다음과 같습니다.

{ 'column_name': { $exists: true } }

언급되지 않았지만 일부(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 }

이제 imageUrl 필드에 sparse 인덱스를 만듭니다.

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" }
{  }
{  }

, ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★imageUrl이유를 확인하기 위해 다음과 같이 설명하십시오.

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테이블 스캔과 같으며 인덱스를 사용하지 않았습니다.수 .hint():

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" }

그리고 우리가 찾던 결과가 있습니다. 필드가 채워진 문서만 반환됩니다.또한 인덱스(즉, 대상 인덱스 쿼리)만 사용하므로 결과를 반환하려면 인덱스만 메모리에 있어야 합니다.

이는 특수한 사용 사례이므로 일반적으로 사용할 수 없습니다(이 옵션에 대한 다른 답변 참조). 현재 할 수 .count()이 방법(제 예에서는 4가 아닌 6이 반환되므로, 적절한 경우에만 사용하십시오.

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

하지 않을 수 있습니다.위에서는 $ne구문을 .즉, 위 에서는 $:"를.MQL($ne:null)은 null(null)을 사용합니다.대신 $ne:" 구문을 사용해야 합니다.즉, 위의 예에서는 $ne:"를 사용해야 합니다.db.mycollection.find({"IMAGE URL":{"$ne":""}})- 왜이 일어나는지 , 이 .- MongoDB 포럼 MongoDB 포럼에 올렸습니다.

다음은 예를 보여 주는 스냅샷입니다.

여기에 이미지 설명 입력

쿼리는

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

"가 포함된 모든 문서가 반환됩니다.「IMAGE URL」을 키의 ............

언급URL : https://stackoverflow.com/questions/4057196/how-do-you-query-for-is-not-null-in-mongo

반응형