답변:
db.things.find( { a : { $exists : false } } ); // return if a is missing
true 인 경우 $ exists는 필드 값이 null 인 문서를 포함하여 필드가 포함 된 문서와 일치합니다. false 인 경우 쿼리는 필드를 포함하지 않는 문서 만 반환합니다.
scope :without_recommendation, :where => {:recommendation => {"$exists"=>false}}
당신은 필드가 누락 된 경우에는 상관하지 않는 경우 null
(또는 적이없는 경우 null
) 다음은 약간 짧은 사용할 수 있습니다 및 안전 :
db.things.find( { a : null } ); // return if a is missing or null
필드가 null 인 경우에도 $exists
반환 되므로 더 안전합니다 true
. 이는 종종 원하는 결과가 아니며 NPE로 이어질 수 있습니다.
null
누락되지 않아야 하기 때문에 코드를 해석 할 수 있습니다 . 이것은 실제로 예상치 못한 동작입니다., 0
(또한 false
)에 대해 동일한 작업을 수행 할 수 없기 때문에 null
여기서는 예외입니다. 따라서 모범 사례는 $exists: false
모호하지 않은 더 읽기 쉬운 답변 입니다. 약간 더 짧은 변형은 그 뒤에 주석이 필요하다면 실제로 더 짧지 않다는 것을 기억하십시오!
a
중 하나 때문에, a
이다 null
또는 때문에 a
누락 된 다음, $exists
이 사건 잡을 것 같은 좋은 것만으로는 충분하지 않습니다 a
이다 null
.
$exist
쿼리는 인덱스를 사용할 수 없습니다 ( mongodb.org/display/DOCS/… 참조 ).