我已经阅读了几篇文章和示例,还没有找到在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上有一个pull请求,修复了.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及更高版本,提供开发预览,不适用于生产)