7

以下が機能しない理由を誰かに説明してもらえますか:

次のドキュメント構造を想定しています。

{
   "_id": "520fb089a6cb538b1843cdf3cca39a15",
   "_rev": "2-f96c27d19bf6cb10268d6d1c34799931",
   "type": "nosql",
   "location": "AZ",
   "date": "2012/03/01 00:00:00",
   "amount": 1500
}

そして、次のように定義された Map 関数:

function(doc) {
  var saleDate = new Date(doc.date);
  emit([doc.location,saleDate.getFullYear(),saleDate.getMonth()+1],doc.amount);
}

_sumそして、レデューサーの組み込み関数を使用します。

これを (group=true で) 実行すると、次のような結果が得られます。

{"rows":[
{"key":["AZ",2012,2],"value":224},
{"key":["AZ",2012,3],"value":1500},
{"key":["WA",2011,12],"value":1965},
{"key":["WA",2012,1],"value":358}
]}

クエリを次のように変更すると、次のようになります。

http://127.0.0.1:5984/default/_design/nosql/_view/nosql_test?group_level=2

次のような結果が得られます。

{"rows":[
{"key":["AZ",2012],"value":1724},
{"key":["WA",2011],"value":1965},
{"key":["WA",2012],"value":358}
]}

したがって、「WA」の 2011 年のすべての売上を調べたい場合、次のようなことはできません。

http://127.0.0.1:5984/default/_design/nosql/_view/nosql_test?group_level=2&key=["WA",2011]

この例は、NoSQL テープにある有用なビデオから抜粋したものです。

http://nosqltapes.com/video/understanding-mapreduce-with-mike-miller

4

1 に答える 1

8

フィルタリングは ではなくmap結果に対して行われるため、常にキーの範囲を指定する必要があります。reduce

たとえば、次のパラメーターが機能するはずです (適切に URL エンコードされている場合)。

?group_level=2&startkey=["WA",2011]&endkey=["WA",2011,{}]

ビューの照合について読んで、それがどのように機能するかを理解できます。

于 2012-02-08T20:36:16.617 に答える