nosql - MongoDB如何随机获取若干条记录
黄舟
黄舟 2017-04-21 10:56:15
0
2
716

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

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

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

모든 응답(2)
巴扎黑

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

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

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

으아아아

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

으아아아

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

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

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

左手右手慢动作

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿