我正嘗試在MongoDB中使用mapreduce來運行網頁排名。在mongodb中計算網頁排名
我的文檔格式爲:
{
"_id" : "u: 10000",
"value" : [
[
"u: 10000",
"s: 985272",
1
],
[
"s: 985272",
"u: 10000",
1
],
[
"u: 10000",
"s: 303770",
1
],
[
"s: 303770",
"u: 10000",
1
]
]
}
現在我認爲第一步是收集的關鍵環節。但是,我有幾個出站鏈接每個文件。 (這些都恰好是雙向的)。
這裏是我的地圖和減少功能:
m = function() {
for (var i = 0; i < this.value.length; i++){
var out = {};
out.out = this.value[i][1];
out.weight = this.value[i][2];
emit(this.value[i][0], [out]);
}
}
r = function(key, values){
var result = {
value: []
};
values.forEach(function(val) {
result.value.push({out: val.out, weight: val.weight});
});
return result;
}
的問題是我不知道發射時產生每個文檔的多個排放。 當我得到這樣的結果:
{
"_id" : "s: 1000082",
"value" : [
{
"out" : "u: 37317",
"weight" : 1
}
]
}
當我希望每個文檔的多個項目。
任何人有任何想法?幫助將不勝感激!
編輯:
我並不完全滿意,例如how do things like this work?減少結果看起來完全不像發射輸出。
您能否澄清字段值是什麼?什麼是「s」和「u」等? –
它們只是伴隨身份證件的不同類型的文件(網頁)... – toofarsideways
下面的答案是正確的 - 如果您在向發射值添加更多字段時遇到問題,我會建議開始一個新問題。 –