[MONGODB] 어떻게 당신이 질의 할 몽고에서 "null가 아닌"?
MONGODB어떻게 당신이 질의 할 몽고에서 "null가 아닌"?
나는 다음과 같은 쿼리를 실행하고 싶습니다 :
db.mycollection.find(HAS IMAGE URL)
올바른 구문은 무엇을해야 하는가?
해결법
-
==============================
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.하나 라이너는 최고입니다 :
하나 라이너는 최고입니다 :
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.당신이 사용할 수있는 pymongo에서 :
당신이 사용할 수있는 pymongo에서 :
db.mycollection.find({"IMAGE URL":{"$ne":None}});
pymongo 파이썬 "없음"으로 몽고 "널 (null)"을 나타 내기 때문이다.
-
==============================
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.우리 (쿼리 MongoDB의 나침반에서 실행) 근무이 쿼리 :
우리 (쿼리 MongoDB의 나침반에서 실행) 근무이 쿼리 :
{ "fieldName": { "$nin": [ "", null ] } }
-
==============================
6.
db.<collectionName>.find({"IMAGE URL":{"$exists":"true"}, "IMAGE URL": {$ne: null}})
-
==============================
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.이상적인 경우에, 당신은 "모든 세 가지 값에 대한 테스트, null로 싶습니다"또는 (레코드에 필드 나던 존재를) 비워
이상적인 경우에, 당신은 "모든 세 가지 값에 대한 테스트, null로 싶습니다"또는 (레코드에 필드 나던 존재를) 비워
다음을 수행 할 수 있습니다.
db.users.find ({$가와 : [{ "이름": {$ 닌 : [ "", null가]}}, { "이름": {$가 존재 : TRUE}}]})
-
==============================
9.쿼리가 될 것인가
쿼리가 될 것인가
db.mycollection.find({"IMAGE URL":{"$exists":"true"}})
그것은 키로 "이미지 URL"을 가진 모든 문서를 반환합니다 ...........
from https://stackoverflow.com/questions/4057196/how-do-you-query-for-is-not-null-in-mongo by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 생산을위한 빠른 GridFS하고 신뢰할 수있는 충분한가요? (0) | 2019.12.10 |
---|---|
[MONGODB] NoSQL에 대한 사용 사례 [마감] (0) | 2019.12.10 |
[MONGODB] MongoDB의 페이지 매김 원거리 (0) | 2019.12.10 |
[MONGODB] 어떻게 MongoDB의 쉘에서 20 개 이상의 항목 (문서)를 인쇄하는? (0) | 2019.12.10 |
[MONGODB] 만들 수 없습니다 개방 / 잠금 파일 : /data/mongod.lock의 errno를 : 13 권한이 거부 (0) | 2019.12.10 |