복붙노트

[MONGODB] MongoDB를 - 가장 가까운 정수 값을 찾기 문서

MONGODB

MongoDB를 - 가장 가까운 정수 값을 찾기 문서

하자 내가 부동 소수점 숫자 비율 속성을 가진 문서의 컬렉션이 가정합니다.

{'ratio':1.437}

어떻게로드하지 않고 주어진 정수에 가장 가까운 값으로 하나의 문서를 찾기 위해 쿼리를 작성하려면 어떻게해야합니까 모두 드라이버 및 ABS (X-비율)의 가장 작은 값을 찾는 하나를 사용하여 메모리에?

해결법

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

    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. ==============================

    2.나는 다른 생각을 가지고 있지만 매우 까다 롭고 데이터 구조를 변경해야합니다.

    나는 다른 생각을 가지고 있지만 매우 까다 롭고 데이터 구조를 변경해야합니다.

    당신은 MongoDB를 지원 위치 정보 인덱스를 사용할 수 있습니다

    먼저,이 구조에 데이터를 변경하고 0으로 두 번째 값을 유지

    {'ratio':[1.437, 0]}
    

    그런 다음 가장 가까운 비율 값을 찾기 위해 $ 근처 연산자를 사용하고, 작업자 때문에 목록은 제공 정수와의 거리상으로 분류 반환 할 수 있습니다, 당신은 단지 가장 가까운 값을 얻기 위해 사용 제한에 있습니다.

    db.places.find( { ratio : { $near : [50,0] } } ).limit(1)
    

    이 작업을 수행하지 않으려면, 당신은 단지 JohnnyHK의 대답 @ 사용할 수있을 것 같아요 :)

  3. from https://stackoverflow.com/questions/13275491/mongodb-find-document-with-closest-integer-value by cc-by-sa and MIT license