我有一个像这样输入的 mongo db 集合
{
_id:
sender:
receiver:
}
无论如何使用/不使用mapreduce在集合中的发送者和接收者中获得前N个?我正在使用 mongodb ruby 驱动程序。
我有一个像这样输入的 mongo db 集合
{
_id:
sender:
receiver:
}
无论如何使用/不使用mapreduce在集合中的发送者和接收者中获得前N个?我正在使用 mongodb ruby 驱动程序。
如果可能,我会查看 MongoDB 2.2(下一个稳定版本)中可用的新聚合框架。这是你想要完成的吗?
输入:
{_id:1, name:"Jenna"}
{_id:2, name:"Jenna"}
{_id:3, name:"Tom"}
{_id:4, name:"Tom"}
{_id:5, name:"George"}
{_id:6, name:"George"}
命令:
> db.unicorn.aggregate({$group: {_id: "$name"}},{$limit:2})
结果:
{
"result" : [
{
"_id" : "George"
},
{
"_id" : "Tom"
}
],
"ok" : 1
}
www.mongodb.org/display/DOCS/Aggregation+Framework
有一个与 map reduce 相关的限制参数,但文档说你不能将它与分片集群一起使用。您可以将 map reduce 的结果输出到新集合并对该集合执行 .find().limit(n) 查询吗?或者您是否试图避免长时间运行的聚合命令,这就是您首先对限制输出感兴趣的原因?还是我误解了你的问题?
输入:
{ "_id" : 1, "sender" : "Jenna"}
{ "_id" : 2, "sender" : "Jenna"}
{ "_id" : 3, "sender" : "George"}
{ "_id" : 4, "sender" : "George"}
{ "_id" : 5, "sender" : "Amy"}
MR函数
map = function () {
emit(this.sender, 1);
}
reduce = function (key, values) {
return 1;
}
输出:
"results" : [
{
"_id" : "Amy",
"value" : 1
},
{
"_id" : "George",
"value" : 1
},
{
"_id" : "Jenna",
"value" : 1
}
]