답변:
"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})
$ne
필드가 포함되지 않은 문서를 포함합니다 . 답변을 게시 한 이후로 변경 되었습니까? docs.mongodb.org/manual/reference/operator/query/ne
하나의 라이너가 최고입니다.
db.mycollection.find({ 'fieldname' : { $exists: true, $ne: null } });
여기,
내 컬렉션 : 원하는 컬렉션 이름을 입력하십시오
분야 명 : 원하는 필드 이름을 입력하십시오
설명 :
존재하는 $ : true 인 경우 $ exists는 필드 값이 널인 문서를 포함하여 필드를 포함하는 문서와 일치합니다. false 인 경우, 조회는 필드를 포함하지 않은 문서 만 리턴합니다.
$ ne 은 필드 값이 지정된 값과 다른 문서를 선택합니다. 필드가 포함되지 않은 문서가 포함됩니다.
따라서 제공된 경우 다음 쿼리는 imageurl 필드가 있고 null 값이없는 모든 문서를 반환합니다.
db.mycollection.find({ 'imageurl' : { $exists: true, $ne: null } });
$exists: true
중복, $ne: null
충분하다.
$exists: true
반환 null
합니다. 모두있을 가지고 $exists: true
와 $ne: null
. 중복되지 않습니다.
db.collection_name.find({"filed_name":{$exists:true}});
이 파일이 포함 된 문서를 가져옵니다.
내 제안 :
db.collection_name.find({"field_name":{$type:2}}) //type:2 == String
필수 속성 유형을 확인할 수 있습니다. 필드 유형이 일치하지 않는 경우 파일 유형을 확인하기 때문에 field_name이 조회 한 field_name에 값이 포함 된 모든 문서를 리턴합니다. 유형 조건이 일치하지 않으면 아무 것도 리턴되지 않습니다.
Nb : field_name에 ""을 의미하는 빈 문자열이 있으면 반환됩니다.
db.collection_name.find({"filed_name":{$ne:null}});
추가 검증 :
좋아, 아직 끝나지 않았으니 추가적인 조건이 필요하다.
db.collection_name.
find({ "field_name":{$type:2},$where:"this.field_name.length >0"})
또는
db.collection_name.
find({ "field_name":{$ne:null},$where:"this.field_name.length >0"})
미래 독자를위한 공유.
이 쿼리는 우리에게 효과적 이었습니다 ( MongoDB compass 에서 실행 된 쿼리 ) :
{
"fieldName": {
"$nin": [
"",
null
]
}
}
db.<collectionName>.find({"IMAGE URL":{"$exists":"true"}, "IMAGE URL": {$ne: 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 }
이제 imageUrl 필드에 희소 색인을 작성하십시오.
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.mycollection.find({"IMAGE URL":{"$exists":"true"}})
"IMAGE URL"을 키로하는 모든 문서를 반환합니다 ...........
$exists
키를 확인하고 "IMAGE URL"
값 ( null
)을 고려하지 않기 때문에 잘못되었습니다. 것 으로 문서를 반환합니다 "IMAGE URL" : null
.
{ field : {$ne : null} }
null이 아닌 docs.mongodb.org/manual/reference/operator/query/ne에