私はいくつかの記事と例を調べましたが、MongoDB(何百万もある)でこのSQLクエリを実行する効率的な方法をまだ見つけていません 行 ドキュメント)
最初の試み
(たとえば、このほぼ重複する質問から-SQLのSELECT DISTINCTに相当するMongo?)
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
}
2回目の試行
グループでやってみることにしました
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
3回目の試み
私はまだ試していませんが、関連するいくつかの提案があります mapReduce
例えば
- これは、mongodbで区別してグループ化する方法ですか?(受け入れられません、回答者/ OPはそれをテストしませんでした)
- 機能別のこの1つのMongoDBグループ(2回目の試行に似ているようです)
- これは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または別のNoSQLDBに移動する必要がありますか?または効率的な方法はありますか?
更新:
MongoDBの公式ドキュメントに対するこのコメントは勇気づけられませんが、これは正確ですか?
http://www.mongodb.org/display/DOCS/Aggregation#comment-430445808
Update2:
新しいアグリゲーションフレームワークが上記のコメントに答えているようです...(MongoDB 2.1 / 2.2以降、開発プレビューが利用可能で、本番環境ではありません)