[MONGODB] MongoDB를 - 가장 가까운 정수 값을 찾기 문서
MONGODBMongoDB를 - 가장 가까운 정수 값을 찾기 문서
하자 내가 부동 소수점 숫자 비율 속성을 가진 문서의 컬렉션이 가정합니다.
{'ratio':1.437}
어떻게로드하지 않고 주어진 정수에 가장 가까운 값으로 하나의 문서를 찾기 위해 쿼리를 작성하려면 어떻게해야합니까 모두 드라이버 및 ABS (X-비율)의 가장 작은 값을 찾는 하나를 사용하여 메모리에?
해결법
-
==============================
1.재미있는 문제. 단일 쿼리에서 그것을 할 수 있을지 모르겠지만, 당신이 그것을 할 수 있습니다 :
재미있는 문제. 단일 쿼리에서 그것을 할 수 있을지 모르겠지만, 당신이 그것을 할 수 있습니다 :
var x = 1; // given integer closestBelow = db.test.find({ratio: {$lte: x}}).sort({ratio: -1}).limit(1); closestAbove = db.test.find({ratio: {$gt: x}}).sort({ratio: 1}).limit(1);
그럼 그냥 목표 정수에 가장 가까운 비율이 두 문서의 어떤 확인.
MongoDB를 3.2 업데이트
3.2 버전은 $에 대한 지원이 지금은 하나의 집계 쿼리에서 수행 할 수 절대 값 집계 연산자 복근 추가합니다 :
var x = 1; db.test.aggregate([ // Project a diff field that's the absolute difference along with the original doc. {$project: {diff: {$abs: {$subtract: [x, '$ratio']}}, doc: '$$ROOT'}}, // Order the docs by diff {$sort: {diff: 1}}, // Take the first one {$limit: 1} ])
-
==============================
2.나는 다른 생각을 가지고 있지만 매우 까다 롭고 데이터 구조를 변경해야합니다.
나는 다른 생각을 가지고 있지만 매우 까다 롭고 데이터 구조를 변경해야합니다.
당신은 MongoDB를 지원 위치 정보 인덱스를 사용할 수 있습니다
먼저,이 구조에 데이터를 변경하고 0으로 두 번째 값을 유지
{'ratio':[1.437, 0]}
그런 다음 가장 가까운 비율 값을 찾기 위해 $ 근처 연산자를 사용하고, 작업자 때문에 목록은 제공 정수와의 거리상으로 분류 반환 할 수 있습니다, 당신은 단지 가장 가까운 값을 얻기 위해 사용 제한에 있습니다.
db.places.find( { ratio : { $near : [50,0] } } ).limit(1)
이 작업을 수행하지 않으려면, 당신은 단지 JohnnyHK의 대답 @ 사용할 수있을 것 같아요 :)
from https://stackoverflow.com/questions/13275491/mongodb-find-document-with-closest-integer-value by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 콜백없이 몽구스 갱신 (0) | 2019.12.12 |
---|---|
[MONGODB] NumberLong으로 간단한 정수 사이 MongoDB의 차이? (0) | 2019.12.12 |
[MONGODB] 시간이 초과 CompositeServerSelector를 사용하여 서버를 선택 30000ms 후에 발생한 (0) | 2019.12.12 |
[MONGODB] MongoDB를 집계 프레임 워크 :합니까 $ 단체 이용 지수? (0) | 2019.12.12 |
[MONGODB] MongoDB를이 - 시간의 시간 범위 사이에 쿼리 (0) | 2019.12.12 |