programing

MongoDB - 값이 null이거나 X보다 작은 결과를 찾습니다.

batch 2023. 7. 5. 20:32
반응형

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

반응형