내가 작업하고있는 응용 프로그램에서 요구 사항은 10-1,000,000 개 정도의 큰 조정 교차로입니다. 우리가 교차하는 항목은 단순히 ObjectId입니다.mongodb의 서버 측 교차점
예를 들어 상자 문서가 있고 상자 문서 안에 item_ids 배열이 있습니다. 각 상자에 대한이 item_ids 배열에는 10-1,000,000 개의 ObjectId가 있습니다.
여기서 마지막 목표는 ObjectId가 4d3dc3898951498107000005 인 상자 A와 ObjectId가 4d3dc3898951498107000002 인 상자 B를 공통으로 가진 item_ids라고 가정하는 것입니다. 여기
메신저가 그 일을하는 방법입니다
db.boxes.distinct("item_ids", {'_id' : {$in : [ObjectId("4d3dc3898951498107000005"), ObjectId("4d3dc3898951498107000002")]}})
첫째 그냥 궁금이 제정신 접근 방식처럼 보인다합니다. 내 연구에서 지금까지지도 축소가 큰 교차점에 대한 일반적인 제안 인 것처럼 보이지만 실시간 쿼리에는 권장되지 않습니다.
둘째, 이것이 샤르드 환경에서 어떻게 작동하는지 궁금하십니까? mongos가 mongod에 쿼리 쿼리를 실행하여 내 결과를 마술처럼 집계해야합니까?
위에서 제정신 경우마지막으로, 또한 할 제정신 : 기본적으로 모든 객체로 구체화 한 후 상자 A와 상자 B 모두 공통점이있는 항목을 찾는 될 것
db.items.find({'_id' : { $in : db.eval(function() {return db.boxes.distinct("item_ids", {_id:{$in:[ObjectId("4d3dc3898951498107000005"), ObjectId("4d3dc3898951498107000002")]}}); }) }})
하나의 서버 측 쿼리에서. 이는 데이터 세트의 페이징을 효과적으로 구현하기 위해 .limit 및 .skip과 함께 작동하는 것으로 보입니다.
어쨌든 모든 피드백은 가치가 있습니다. 감사합니다!
'별개'가 공통으로 값을 찾는 방법은 무엇입니까? "콜렉션에서 주어진 키의 고유 한 값 목록을 리턴합니다." Distinct에는 '교차점'기능이 없으며 A 또는 B에있는 모든 ID의 목록을 제공합니다. 또는 'union'을 의미합니까? –
오우, 네, 맞아요. 나는 분명히 더 많은 커피가 필요하다. 나는이 질문을 삭제해야한다고 생각한다. 서버 측 어레이/세트 교차점에 대한 다른 아이디어가있는 경우를 대비하여 조금 남겨 둘 것입니다. 감사! – spotman