복붙노트

[SPRING] MongoDB 비교 연산자가 null 인 경우

SPRING

MongoDB 비교 연산자가 null 인 경우

MongoDB에서 값이 null 일 수있는 $ gt 및 $ lt 비교 연산자를 사용하고 싶습니다. 운영자가 null로 작업하지 않으면 설명서를 찾았지만 아무 것도 발견하지 못했습니다. 두 경우 모두 문서를 반환하지 않았지만 ($ ne, $ gte 및 $ lte가 문서를 반환했지만, null과 같거나 같지 않은 문서가 있음을 의미 함).

$ gt (null type Mongo 비교 순서가 너무 낮기 때문에)와 같은 본질적으로 작동하는 $ gt와 같은 이유로 아무것도 반환하지 않는 $ lt를 기대합니다.

쿼리에 전달하는 값이 가변적 (null 일 가능성이 있음)이므로 null이 특별한 경우를 작성하지 않아도되기를 기대합니다.

다음 콜렉션이 주어 졌을 때 내가 봤던 것의 예 :

{
  id: 1,
  colNum: null
}
{
  id: 2,
  colNum: 72
}
{
  id: 3
}

나는 다음 쿼리를 기대할 것이다 :

db.testtable.find( { "colNum" { $gt : null } } )

돌려 주다:

{
  id: 2,
  colNum: 72
}

그러나 아무 것도 반환되지 않았습니다.

$ gt와 $ lt가 null로 작동하지 않는 것, 또는 MongoDB 버그입니까, 아니면 실제로 작동하고 실제로 사용자 오류가있을 수 있습니까?

해결법

  1. ==============================

    1.최신 Mongo 소스를 통해 읽으면 기본적으로 널을 포함하는 비교를 할 때 2 가지 경우가 있습니다.

    최신 Mongo 소스를 통해 읽으면 기본적으로 널을 포함하는 비교를 할 때 2 가지 경우가 있습니다.

    이것은, null가 null 또는 미정 도일 수있는 것을 의미합니다. null를 포함한 다른 모든 비교는 항상 false를 리턴합니다.

    업데이트 된 답변 :

    비교 연산자 ($ gt, $ lt)에 대한 문서는 처음에 링크 한 문서를 참조합니다. 이는 비교 연산자가 null을 사용해야 함을 의미합니다. 또한 쿼리 정렬 (즉, db.find (). sort ())은 문서화 된 비교 / 정렬 비헤이비어를 정확하게 따르고 있습니다.

    이것은 적어도 일관성이 없습니다. MongoDB의 JIRA 사이트에 버그 리포트를 제출하는 것이 가치 있다고 생각합니다.

    원문 답변 :

    나는이 행동이 버그라고 생각하지 않는다.

    Javascript에 대한 일반적인 합의는 undefined는 할당되지 않은 것을 의미하지만 null은 할당되지만 그렇지 않으면 정의되지 않는다는 것을 의미합니다. 평등을 제외하고 정의되지 않은 것에 대한 가치 비교는 최소한 수학적으로는 의미가 없습니다.

    BSON이 JavaScript에서 크게 벗어나는 것을 감안할 때 MongoDB에도 마찬가지입니다.

  2. from https://stackoverflow.com/questions/29835829/mongodb-comparison-operators-with-null by cc-by-sa and MIT license