MongoDB : 필드가 null이거나 설정되지 않은 레코드를 쿼리하는 방법은 무엇입니까?


106

날짜 필드 가있는 Email문서가 있습니다 sent_at.

{
  'sent_at': Date( 1336776254000 )
}

이이 경우 Email전송되지는 sent_at필드 중 하나를 널 (null), 또는 존재하지 않는 것입니다.

보낸 / 보내지 않은 모든 수를 가져와야 Emails합니다. 이 정보를 쿼리하는 올바른 방법을 찾으려고 노력하고 있습니다. 나는 이것이 보낸 수를 얻는 올바른 방법이라고 생각합니다.

db.emails.count({sent_at: {$ne: null}})

하지만 전송되지 않은 항목의 수는 어떻게 구해야합니까?

답변:



16

sent_at값 으로 정의 된 문서 만 계산하려는 경우 null( sent_at설정되지 않은 문서는 계산하지 않음 ) :

db.emails.count({sent_at: { $type: 10 }})

감사합니다. 필드가 존재하지만 null로 설정되어 있는지 확인할 때 이것은 매우 유용합니다.
jstice4all

사용하는 경우 때문에 Upvoted find일반과 null는 같은 값을 해석 0.0null이 솔루션이 피할 수
마티아스 헤르만를

12

사용하다:

db.emails.count({sent_at: null})

sent_at 속성이 null이거나 설정되지 않은 모든 이메일을 계산합니다. 위 쿼리는 아래와 같습니다.

db.emails.count($or: [
  {sent_at: {$exists: false}},
  {sent_at: null}
])


0

다음을 시도해 볼 수도 있습니다.

db.emails.find($and:[{sent_at:{$exists:true},'sent_at':null}]).count()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.