我有一个像这样委托的mongo db集合
{
_id:
sender:
receiver:
}
是否有使用/不使用mapreduce在集合中的发送者和接收者中获得前N个?我正在使用mongodb ruby驱动程序。
答案 0 :(得分:1)
如果可能,我会查看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
答案 1 :(得分:1)
有一个与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
}
]