最佳答案
我已经阅读了几篇文章和示例,尚未找到在 MongoDB 中执行这个 SQL 查询的有效方法(MongoDB 中有数百万个 一排排文档)
第一次尝试
(例如,从这个几乎重复的问题 -相当于 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
例如:。
还有
GitHub 上似乎有一个拉请求,修复了 .distinct
方法,提示它应该只返回一个计数,但它仍然是打开的: https://github.com/mongodb/mongo/pull/34
但在这一点上,我认为值得在这里问一问,这个问题的最新进展是什么?我应该移动到 SQL 或另一个 NoSQL 数据库为不同的计数?还是有一个有效的方法?
更新:
MongoDB 官方文档上的这个评论并不鼓舞人心,这个评论准确吗?
Http://www.mongodb.org/display/docs/aggregation#comment-430445808
更新2:
新的聚合框架似乎回答了上面的注释... (MongoDB 2.1/2.2及以上版本,开发预览可用,不适用于生产环境)