최근 프로젝트에서 mongo를 데이터베이스로 사용하다가 문제가 발생했습니다.
으아악이러한 쿼리를 사용하면 쿼리 결과가 자연스럽게 정렬됩니다.
으아악값을 전달할 때 {d,c,b,a}가 아닙니다.
$in의 연산은 데이터를 자연 순서로 순회하여 $in의 데이터와 차례로 비교하는 것 같습니다. , 그러면 최종 데이터가 자연스럽게 정렬되지만 이제 비즈니스는 값을 전달하는 순서대로 이루어져야 합니다. 정렬은 코드 계층에서만 구현할 수 있습니까?
PHP를 사용하고 있는데 더 간단한 정렬 방법이 있는지 모르겠습니다.
조언 부탁드립니다.
방금 또 다른 비슷한 문제를 보았습니다. nodeID에 인덱스를 추가하면 $in에 전달된 값을 기반으로 쿼리가 수행됩니다. 한번 시도해 보겠습니다.
인덱스를 추가하고 나면 실제로는 들어오는 순서대로 정렬되는데, 아래층 누군가는 이것이 몽고의 기능이고 종속성으로 사용할 수 없다고 말했습니다. 이제는 코드 레이어를 통해서만 구현할 수 있습니다.
이런 결과가 나온 이유를 짐작할 수 있습니다.
색인이 없으면
COLLSCAN
을$natural
순으로 순회하므로 나오는 것도 자연스럽게색인이 있으면
IXSCAN
은 키별로 수행한 후 원하는 순서대로 결과 집합에 하나씩 넣습니다.프로그래밍 관점에서 이는 의미가 있습니다. 그러나 MongoDB의 향후 버전이 이러한 동작을 유지할 것이라는 보장은 없습니다.
실제로 정렬이 지정되지 않은 경우 대부분의 데이터베이스는 엔진이 가장 효율적이라고 생각하는 순서인 무작위 순서로 결과를 반환합니다. 따라서 지금 가장 효율적인 순서가 정확히 원하는 순서라고 해도 앞으로도 항상 그럴 것이라는 의미는 아닙니다. 이 기능에 의존하지 마십시오. 그렇지 않으면 향후 특정 버전이 업그레이드될 때 매우 이상하고 찾기 어려운 문제가 발생할 수 있습니다.
개인 제안:
가능한 경우 입력 순서대로 정렬을 지정하여 올바른 결과 순서를 얻으세요.
입력 순서를 지정할 수 없는 경우 프로그램에서 직접 정렬하세요.