찾다

 >  Q&A  >  본문

nosql - MongoDB如何随机获取若干条记录

在MySQL中,可以通过下面的语句简单的获取随机的5条记录:

SELECT * FROM `table` ORDER BY RAND() LIMIT 5

但是在MongoDB下,没有找到rand()方法,而且ObjectID也不是MySQL那样整数的,不好随机,不知道大家有什么好办法?

黄舟黄舟2799일 전714

모든 응답(2)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-21 10:58:15

    실제로 이 기능 추가 여부에 대한 논의가 https://jira.mongodb.org/browse/SERVE...에서 진행 중이지만 현재로서는 실질적인 진전이 없는 것 같습니다.

    실제로 MySQL은 임시 테이블을 생성하고 모든 후보 행에 대해 난수를 생성한 다음 난수를 정렬하여 필요한 결과를 얻습니다.

    MongoDB에서는 문서에 대한 정렬 속성을 직접 작성해야 합니다. 이 속성의 값은 요리책에서 가져온 임의의 숫자일 수 있습니다.

    으아아아

    검색할 때 난수를 계산한 다음 정렬 속성에서 가장 가까운 숫자를 찾으세요. 단, 정렬 속성에 색인을 추가하는 것을 잊지 마세요.

    으아아아

    정렬 속성의 값은 MySQL처럼 동적이지 않기 때문에 여러 문서를 무작위로 얻으려면 위 작업을 반복해야 합니다.

    이 문제의 근본 원인은 수학적 의미에서 임의성이 필요한지 여부라고 생각합니다. 대략적인 아이디어를 원한다면 인덱싱하지 않고 많은 양의 데이터에 대해 Map/Reduce를 사용하여 수렴 속도를 향상시킬 수 있습니다.

    그래서 실제로 타임스탬프도 사용할 수 있습니다. 너무 많은 반복 값 없이 상한값과 하한값을 찾을 수 있는 속성이면 임의 정렬에 사용할 수 있습니다.

    회신하다
    0
  • ringa_lee

    ringa_lee2017-04-21 10:58:15

    조건 추가
    "$where":function () { if(Math.random()>0.1){return true;}else{return false;}}
    리미트와 협력(1)
    1/10의 확률로 세트에서 레코드를 무작위로 선택
    더 쉬울 수도 있지만 적용이 더 제한적입니다. 참고용으로~

    회신하다
    0
  • 취소회신하다