mongodb 및 pymongo에서 빈 문자열 테스트
여기 제 데이터 구조가 있습니다.
[{
"name": "David",
"lastname": "",
},
{
"name": "Angela"
}]
"성"은 때때로 존재하지만 때로는 존재하지 않으며 때로는 ""입니다.
성이 ""와 같지 않은 모든 행을 가져오려고 합니다.하지만 이것은 효과가 없습니다.성이 "일 때와 성이 전혀 없을 때 두 행을 모두 반환합니다. 위의 예에서는 David 노드만 가져오려고 합니다.
db.collection.find( {"lastname": {"$ne": ""}} )
db.collection.find({"lastname" : {"$exists" : true, "$ne" : ""}})
mongo 셸에서(공간 절약을 위해 id가 생략됨)
> db.collection.find()
{ "name" : "Angela" }
{ "name" : "David", "lastname" : "" }
{ "name" : "Kyle", "lastname" : "Test" }
{ "name" : "John", "lastname" : null }
> db.collection.find({"lastname" : {"$exists" : true, "$ne" : ""}})
{ "name" : "Kyle", "lastname" : "Test" }
{ "name" : "John", "lastname" : null }
null 값에 대한 일치 항목도 필터링하려면 다음과 같이 기준을 조정해야 합니다($exists를 "$ne"로 제거할 수도 있습니다: null이 이를 처리합니다).
> db.collection.find({$and:[{"lastname": {"$ne": null}}, {"lastname": {"$ne": ""}}]})
{ "name" : "Kyle", "lastname" : "Test" }
이 문제에 직면하여 저는 다른 해결책을 생각했습니다.
db.collection.find({"lastname": {"$gte": " "}})
인쇄 가능한 값(ASCII)은 공백(32)보다 큰 값을 가지고 있기 때문에 빈 문자열만 얻을 수 있고 null 및 존재하지 않는 필드도 무시할 수 있습니다.
https://en.wikipedia.org/wiki/ASCII
정규식 쿼리를 사용할 수 있습니다.
db.test.find({ "lastname": /(.|\s)*\S(.|\s)*/ })
이 정규식은 0 또는 N개의 공백으로 시작하거나 끝나는 문자열과 일치합니다.(.|\s)
하나 이상의 공백이 있어야 합니다.\S
가운데에.
이것이 도움이 될지는 모르겠지만, 저에게는 효과가 있었습니다.정규식.+
하나 이상의 문자를 포함하는 모든 문자를 반환하는 반면.*
0 이상을 반환합니다.따라서 0자 미만은 반환하지 않습니다.
공백만 포함된 문자열의 경우 이 솔루션으로는 처리할 수 없다고 생각합니다.
언급URL : https://stackoverflow.com/questions/9694223/test-empty-string-in-mongodb-and-pymongo
'programing' 카테고리의 다른 글
장고 템플릿 내에서 내 사이트의 도메인 이름을 가져오는 방법은 무엇입니까? (0) | 2023.05.20 |
---|---|
이클립스에서 APK 파일을 만드는 방법은 무엇입니까? (0) | 2023.05.20 |
numpy 배열 목록을 단일 numpy 배열로 변환하는 방법은 무엇입니까? (0) | 2023.05.20 |
사용자에 대한 엔티티 프레임워크 비계-DbContext 로그인 실패 (0) | 2023.05.20 |
이벤트 처리기가 동적 콘텐츠에서 작동하지 않음 (0) | 2023.05.20 |