MongoDB - 값이 null이거나 X보다 작은 결과를 찾습니다.
나는 MongoDB에 어떤 것이 최신인지 아닌지를 정의하는 두 개의 날짜가 있는 컬렉션을 가지고 있습니다.따라서 "end_date"는 null일 수도 있고 시간 값을 가질 수도 있습니다.현재 항목에 null end_date 또는 미래의 시간이 있습니다.내 질문은 다음과 같습니다.
program_enrollments.find( {"start_date":{"$lte":1376982000},"end_date":[null,{"$gte ":1376982000}],"client":"52002d02cc94a31a0f000000"}, [] )
제가 보기에 이것은 적절해 보이지만, 다른 접근법이 필요한가요?피할 수 있다면 날짜가 최신인지 여부를 알려주는 부울 플래그는 원하지 않습니다.
$or 연산자는 때때로 매우 번거로울 수 있습니다. 특히 여러 옵션이 있는 다른 필드가 있는 경우에는 $or의 중첩된 값을 $and 내에 모두 넣어야 합니다.
또 다른 옵션은 부정 연산자를 사용하는 것일 수 있습니다.
"end_date": {"$not": {"$lt":1376982000}}
이렇게 하면 다음과 같은 결과를 얻을 수 있습니다.
$or: [{end_date: null}, {end_date: {$gte: 1376982000}}]
그리고 당신의 질문은 다음과 같이 보일 것입니다. IMO는 좀 더 깨끗합니다.
program_enrollments.find({
start_date: {$lte: 1376982000},
end_date: {$not: {$lt: 1376982000}},
client:"52002d02cc94a31a0f000000"
})
당신은 찾고 있습니다.$or
연산 - 연산 배열을 허용합니다.다음과 같습니다.
$or: [{end_date: null}, {end_date: {$gte: 1376982000}}]
전체 쿼리는 다음과 같습니다.
program_enrollments.find({
start_date: {$lte: 1376982000},
$or: [
{end_date: null},
{end_date: {$gte: 1376982000}}
],
client:"52002d02cc94a31a0f000000"
})
스케일 조정을 위해 다음 중 하나를 제거하는 방법을 찾고자 할 것입니다.$gte
그리고.$lte
연산자MongoDB는 다음의 조합을 사용할 수 없습니다.$lte
그리고.$gte
검색할 수 있습니다.
$and 연산자는 상당히 많을 수 있습니다.특히 여러 옵션이 있는 다른 필드가 있는 경우에는 $or의 중첩된 값을 모두 $and 안에 넣어야 합니다.
db.program_ments.find({"$ 및":[{"$or":[{"object.key":{},{"object.key":{"$gt":"vmdk-01-01",$lt":"vmdk-01-31"}},{"object.key":""}}}
대신에{end_date: null}
다음을 사용하여 변수가 존재하는지 물어볼 수 있습니다.{end_data: {$exists: false}}
참고: 만약end_date
의 문서에 있습니다.null
첫 번째 것은 작동하고 두 번째 것은 작동하지 않습니다.
언급URL : https://stackoverflow.com/questions/18342529/mongodb-find-result-where-value-is-null-or-less-than-x
'programing' 카테고리의 다른 글
클리닝 코드 - @Autowire를 적용해야 하는 위치는 어디입니까? (0) | 2023.07.05 |
---|---|
클래스 생성자는 'new' 없이 호출할 수 없습니다. commonjs가 있는 typescript (0) | 2023.07.05 |
데이터 소스를 사용할 수 있을 때까지 스프링 재시도 연결 (0) | 2023.07.05 |
기본(슈퍼) 클래스를 초기화하려면 어떻게 해야 합니까? (0) | 2023.06.30 |
존재하지 않는 행 업데이트/삭제 시 PL/SQL 예외 (0) | 2023.06.30 |