私はマップ削減の概念に不慣れで、進歩が遅いものの、助けが必要な問題をいくつか見つけています。
ID、都市、および目的地で構成される単純なコレクションがあります。次のようなものです。
{ "_id" : "5230e7e00000000000000000", "city" : "Boston", "to" : "Chicago" },
{ "_id" : "523fe7e00000000000000000", "city" : "New York", "to" : "Miami" },
{ "_id" : "5240e1e00000000000000000", "city" : "Boston", "to" : "Miami" },
{ "_id" : "536fe4e00000000000000000", "city" : "Washington D.C.", "to" : "Boston" },
{ "_id" : "53ffe7e00000000000000000", "city" : "New York", "to" : "Boston" },
{ "_id" : "5740e1e00000000000000000", "city" : "Boston", "to" : "Miami" },
...
(このデータは例として作成されていることに注意してください)
カウントを含む目的地を都市ごとにグループ化したいと思います。
{ "city" : "Boston", values : [{"Chicago",1}, {"Miami",2}] }
{ "city" : "New York", values : [{"Miami",1}, {"Boston",1}] }
{ "city" : "Washington D.C.", values : [{"Boston", 1}] }
このために、私はこの関数を使ってマッピングを始めています:
function() {
emit(this.city, this.to);
}
期待されるグループ化を実行します。私のreduce関数はこれです:
function(key, values) {
var reduced = {"to":[]};
for (var i in values) {
var item = values[i];
reduced.to.push(item);
}
return reduced;
}
これにより、期待される出力がいくらか得られます。
{ "_id" : ObjectId("522f8a9181f01e671a853adb"), "value" : { "to" : [ "Boston", "Miami" ] } }
{ "_id" : ObjectId("522f933a81f01e671a853ade"), "value" : { "to" : [ "Chicago", "Miami", "Miami" ] } }
{ "_id" : ObjectId("5231f0ed81f01e671a853ae0"), "value" : "Boston" }
ご覧のとおり、繰り返される都市はまだ数えていませんが、上記のように、何らかの理由で出力の最後の結果が良くありません。私はそれを期待していた
{ "_id" : ObjectId("5231f0ed81f01e671a853ae0"), "value" : { "to" : ["Boston"] } }
これは単品ということと何か関係があるのでしょうか?これを入手する方法はありますか?
ありがとうございました。