MongoDB: 필드가 null인지 설정되지 않은지에 대한 레코드를 조회하려면 어떻게 해야 합니까?
나는 가지고 있다.Email
가 있는 문서sent_at
날짜 필드:
{
'sent_at': Date( 1336776254000 )
}
이 경우Email
전송되지 않았습니다.sent_at
필드가 null이거나 존재하지 않습니다.
송신/송신하지 않은 모든 카운트를 취득할 필요가 있다.Emails
이 정보를 문의하는 올바른 방법을 찾아야 할 것 같습니다.송신 카운트를 취득하는 올바른 방법은 다음과 같습니다.
db.emails.count({sent_at: {$ne: null}})
하지만 보내지지 않은 건 어떻게 세야 하죠?
이 경우,sent_at
필드가 설정되지 않은 경우 다음과 같이 표시되지 않습니다.
db.emails.count({sent_at: {$exists: false}})
여기에 null이 있거나 아예 없는 경우:
db.emails.count({sent_at: null})
여기에 있고 null인 경우:
db.emails.count({sent_at: { $type: 10 }})
MongoDB 매뉴얼의 "Query for Null or Missing Fields" 섹션에서는 Null 및 Missing 값을 쿼리하는 방법에 대해 설명합니다.
등식 필터
그
{ item : null }
쿼리는 값이 다음과 같은 항목 필드를 포함하는 문서와 일치합니다.null
또는 를 포함하지 않는다.item
들판.db.inventory.find( { item: null } )
존재 확인
다음 예제에서는 필드가 없는 문서를 조회합니다.
그
{ item : { $exists: false } }
쿼리는 다음을 포함하지 않는 문서와 일치합니다.item
필드:db.inventory.find( { item : { $exists: false } } )
유형 검사
그
{ item : { $type: 10 } }
쿼리는 다음을 포함하는 문서만 일치합니다.item
값이 다음과 같은 필드null
; 즉, 항목 필드의 값이 BSON 유형입니다.Null
(타입 번호10
) :db.inventory.find( { item : { $type: 10 } } )
다음을 포함하는 문서만 계산하려면sent_at
값으로 정의되다null
(문서의 수를 세지 않음)sent_at
설정되지 않음):
db.emails.count({sent_at: { $type: 10 }})
용도:
db.emails.count({sent_at: null})
sent_at 속성이 null이거나 설정되지 않은 모든 전자 메일을 카운트합니다.위의 쿼리는 아래와 같습니다.
db.emails.count({$or: [
{sent_at: {$exists: false}},
{sent_at: null}
]})
한 줄만 할 수 있을 것 같아요.
{ "sent_at": null }
위의 답변은 모두 놀랍고 정확합니다.를 사용하고 있는 회답에 대해서, 1개의 개선점을 추가해 주세요.$type
.
MongoDB 3.2 이후로는10
(하드코딩된 리터럴로 인해 코드 가독성이 저하됨) 대신 문자열 별칭을 사용할 수 있습니다. "null"
정리하자면...
1. 레코드 선택 시sent_at
존재하며 가치가 있습니다.null
db.emails.count({sent_at: { $type: 'null' }});
// or
// This reduces the code readability as your peer might not know
// that what is the meaning of value 10
db.emails.count({sent_at: { $type: 10 }});
2. 다음 중 하나를 가진 레코드를 선택하고 싶은 경우sent_at: null
또는sent_at
존재하지 않는다
// This will ensure both the conditions
db.emails.count({ sent_at: null })
3. 레코드가 필요한 경우sent_at
존재하지 않는다
db.emails.count({sent_at: { $exists: false }});
4. 선택만 하고 싶다면sent_at
필드가 존재하며 값이 있을 수 있습니다.
db.emails.count({sent_at: { $exists: true }});
이 경우 다음 문서를 가져올 수 있습니다.emails
다음을 포함한 모든 가치를 지닌다.null
,0
,''
,false
.
필요한 경우 속성의 존재와 값이 null인 것을 확인합니다.
db.emails.count($or: [
{sent_at: {$exists: false}},
{sent_at: null}
])
위의 작업은 단일 라인 쿼리에서 수행할 수 있으며, 이는 다음과 같은 시간이 더 적게 소요됩니다.
db.emails.count($or: [ {sent_at: nil }])
nil
가 있으면 .doesn't exist
too too 、 「 」null
.
정보원을 한 번 보는 게 좋을 것 같아. 덕분에 나는 살아났다.
" " 를 사용합니다.
nil
null
몽고답
다음의 조작도 실행할 수 있습니다.
db.emails.find($and:[{sent_at:{$exists:true},'sent_at':null}]).count()
$in 연산자를 사용하여 두 가지 사례를 모두 확인할 수 있습니다.
db.emails.find({"sent_at": {$in:[null,""]}).count()
db.employe.find({ $and:[ {"dept":{ $exists:false }, "empno": { $in:[101,102] } } ] }).count();
언급URL : https://stackoverflow.com/questions/10591543/mongodb-how-to-query-for-records-where-field-is-null-or-not-set
'programing' 카테고리의 다른 글
JSON 필드에 대한 업데이트가 DB에 지속되지 않음 (0) | 2023.02.26 |
---|---|
Wordpress - 학습되지 않은 구문 오류:예기치 않은 토큰 < (0) | 2023.02.26 |
gson을 사용한 Java 날짜 UTC (0) | 2023.02.26 |
ng-parent $parent가 네스트되었습니다.$index 및 $index (0) | 2023.02.26 |
MUI 구성 요소의 미디어 조회 (0) | 2023.02.26 |