我有以下布局:
{
"URL": "http://someurl.de",
"plugins": {
"HTTPServer": {
"os": [
"FreeBSD"
],
"string": [
"Apache/2.2.21 (FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8q DAV/2 PHP/5.3.8 with Suhosin-Patch"
]
}
}
}
我想从中获取存储在 plugins.HTTPServer.string 中的唯一项目的计数。然而,所有 MapReduce 示例都仅引用单级文档。据我了解这些示例,您必须在 map 函数中发出数据(或选择要提取的数据),然后使用 reduce 进一步处理结果。我认为我的问题是在映射阶段 - 我需要访问上面的字符串值:“Apache/2.2 ...”
由于我只在 MongoDB 中度过了最后一天,如果我没有在这里提出正确的问题,请原谅我的无知。我是否朝着正确的方向前进?我知道我可以使用 distinct = db.coll.distinct('plugins.HTTPServer.string'),但我想用 MapReduce 来完成。
map = function() {
server = this.plugins.HTTPServer.string
emit({server : this.server}, {count: 1});
}
reduce = "function(key, values) {
var count = 0;
values.forEach(function(v) {
count += v['count'];
});
return {count: count};
}"