Mongo : 특정 필드가없는 항목 찾기


107

MongoDB에서 특정 필드가 누락 된 컬렉션의 문서를 검색하는 방법은 무엇입니까?

답변:


171

예, $ exists를 사용하는 것이 가능 합니다 .

db.things.find( { a : { $exists : false } } ); // return if a is missing

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


1
주의하십시오. $exist쿼리는 인덱스를 사용할 수 없습니다 ( mongodb.org/display/DOCS/… 참조 ).
Theo

4
@Theo : MongoDB 2.0부터 $ exists는 인덱스를 사용할 수 있습니다 ( jira.mongodb.org/browse/SERVER-393 )
Dmitry Schetnikovich 2011

나는 Mongoid가 스코프에서 사용하기 위해이 이후였습니다. 이 같은 외모는>scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
genkilabs

50

당신은 필드가 누락 된 경우에는 상관하지 않는 경우 null(또는 적이없는 경우 null) 다음은 약간 짧은 사용할 수 있습니다 안전 :

db.things.find( { a : null } ); // return if a is missing or null

필드가 null 인 경우에도 $exists반환 되므로 더 안전합니다 true. 이는 종종 원하는 결과가 아니며 NPE로 이어질 수 있습니다.


1
그러나 코드를 읽는 사람은 필드가 같고 null누락되지 않아야 하기 때문에 코드를 해석 할 수 있습니다 . 이것은 실제로 예상치 못한 동작입니다., 0(또한 false)에 대해 동일한 작업을 수행 할 수 없기 때문에 null여기서는 예외입니다. 따라서 모범 사례는 $exists: false모호하지 않은 더 읽기 쉬운 답변 입니다. 약간 더 짧은 변형은 그 뒤에 주석이 필요하다면 실제로 더 짧지 않다는 것을 기억하십시오!
Yeti

@Yeti 내 목표는 필드의 값을 누락 모든 개체를 찾을 경우 a중 하나 때문에, a이다 null또는 때문에 a누락 된 다음, $exists이 사건 잡을 것 같은 좋은 것만으로는 충분하지 않습니다 a이다 null.
nilskp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.