programing

MongoDB: 필드가 null인지 설정되지 않은지에 대한 레코드를 조회하려면 어떻게 해야 합니까?

lastmoon 2023. 2. 26. 10:25
반응형

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.
정보원을 한 번 보는좋을 것 같아. 덕분에 나는 살아났다.

" " 를 사용합니다.nilnull몽고답

다음의 조작도 실행할 수 있습니다.

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

반응형