【发布时间】:2013-08-28 23:32:57
【问题描述】:
我有一个 MapReduce 作业,我只想在辅助服务器上运行。 MapReduce 输出将创建一个临时集合来存储结果,我想从该集合中读取结果,然后删除该集合。
【问题讨论】:
我有一个 MapReduce 作业,我只想在辅助服务器上运行。 MapReduce 输出将创建一个临时集合来存储结果,我想从该集合中读取结果,然后删除该集合。
【问题讨论】:
您不能在 MongoDB 辅助节点上运行输出到集合中的 MapReduce 作业。您只能在 MongoDB 主节点上直接插入/更新数据。
但是,您可以使用 out 参数使 MapReduce 输出 returned inline,例如:
out: { inline: 1 }
请注意,内联输出仅限于 maximum document size(在 MongoDB 2.4 中为 16 MB)。
【讨论】:
answer above 是准确的。仅提及其他信息:
outline 设置 inline 参数。示例 (Source):
RS-replica-0:PRIMARY> db.txns.findOne()
{
"_id" : ObjectId("584a3b71cdc1cb061957289b"),
"custid" : "cust_66",
"txnval" : 100,
"items" : [{"sku": sku1", "qty": 1, "pr": 100}, ...],
...
}
RS-replica-0:PRIMARY> var mapFunc = function() { emit(this.custid, this.txnval); }
RS-replica-0:PRIMARY> var reduceFunc = function(key, values) { return Array.sum(values); }
RS-replica-0:PRIMARY> db.txns.mapReduce(mapFunc, reduceFunc, {out: { inline: 1 }})
{
"results" : [
{
"_id" : "cust_0",
"value" : 72734
},
{
"_id" : "cust_1",
"value" : 67737
},
...
]
"timeMillis" : 215,
"counts" : {
"input" : 10000,
"emit" : 10000,
"reduce" : 909,
"output" : 101
},
"ok" : 1
}
【讨论】: