여러 기사와 예제를 살펴 봤지만 MongoDB에서이 SQL 쿼리를 수행하는 효율적인 방법을 아직 찾지 못했습니다. 행 서류)
첫번째 시도
(예를 들어 거의 중복되는 질문에서 -Mongo는 SQL의 SELECT DISTINCT에 해당합니까? )
db.myCollection.distinct("myIndexedNonUniqueField").length
내 데이터 세트가 거대하기 때문에 분명히이 오류가 발생했습니다.
Thu Aug 02 12:55:24 uncaught exception: distinct failed: {
"errmsg" : "exception: distinct too big, 16mb cap",
"code" : 10044,
"ok" : 0
}
두 번째 시도
나는 그룹을 시도하고하기로 결정했다
db.myCollection.group({key: {myIndexedNonUniqueField: 1},
initial: {count: 0},
reduce: function (obj, prev) { prev.count++;} } );
하지만 대신이 오류 메시지가 나타납니다.
exception: group() can't handle more than 20000 unique keys
세 번째 시도
나는 아직 시도하지 않았지만 관련된 몇 가지 제안이 있습니다. mapReduce
예 :
- 이 하나의 MongoDB의에서 구별 할 수있는 방법 및 그룹? (승인되지 않음, 답변 작성자 / OP가 테스트하지 않음)
- 기능별 이 하나의 MongoDB 그룹 (두 번째 시도와 유사 함)
- 이 http://blog.emmettshear.com/post/2010/02/12/Counting-Uniques-With-MongoDB
- 이 https://groups.google.com/forum/?fromgroups#!topic/mongodb-user/trDn3jJjqtE
- 이거 http://cookbook.mongodb.org/patterns/unique_items_map_reduce/
또한
GitHub에서 .distinct메서드를 수정하여 개수 만 반환해야한다고 언급 하는 풀 요청이있는 것 같지만 여전히 열려 있습니다. https://github.com/mongodb/mongo/pull/34
하지만이 시점에서 저는 여기서 질문 할 가치가 있다고 생각했습니다.이 주제에 대한 최신 정보는 무엇입니까? 고유 카운트를 위해 SQL 또는 다른 NoSQL DB로 이동해야합니까? 아니면 효율적인 방법이 있습니까?
최신 정보:
MongoDB 공식 문서에 대한이 의견은 고무적이지 않습니다. 정확합니까?
http://www.mongodb.org/display/DOCS/Aggregation#comment-430445808
업데이트 2 :
새로운 Aggregation Framework가 위의 의견에 답하는 것 같습니다 ... (MongoDB 2.1 / 2.2 이상, 개발 미리보기 가능, 프로덕션 용이 아님)