2011-06-09 18 views
5

Anahtar reklam olarak bir zaman damgasını belge olarak bir sayı olarak gönderen bir harita işlevim varsa, bir tarih aralığını seçen değerlerin toplamı nasıl elde edilir?couchdb kullanarak bir tarih aralığındaki bir görünümün değerlerini nasıl belirleyebilirim?

DÜZENLEME bir belge örneği:

{ 
    "_id": "[2011, 6, 7, 10, 55]", 
    "_rev": "1-f87d54608d36cd2e28add67e88e416a4", 
    "volt": 107, 
    "ampere": 23.5 
} 

görünümüdür:

{ 
    "_id": "_design/power", 
    "_rev": "1-7788287ab51c480c725498eba4f79ddb", 
    "language": "javascript", 
    "views": { 
     "watt": { 
      "map": "function(doc) {\n emit(doc._id, doc.volt * doc.ampere);\n}" 
     } 
    } 
} 

Ben mesela .: Mart ayında saatte ortalama sorgulamak gerekir.

"reduce":"_sum" 

Sonra uygun grup düzeyi ile görünümünüzü sorgulamak gerekiyor ve bir startkey ve endkey:

+0

Lütfen örnek belgeleri ve harita fonksiyon kaynağınızı ekleyin –

cevap

6

Tarih bilgisinde bir aralık sorgulaması yapmak istediğinizde _id dosyanızı bir anahtar olarak yayan harita işlevinizle ilgili bir sorun görüyorum. Tarih bilgilerini ayrı bir alana kaydetmelisiniz. _id bir dize olmalı ve üzerinde startkey-endkey sorguyu doğru bir şekilde gerçekleştiremezsiniz. gibi

şey:

{ 
    "_id": "997b9f758899f102ab58570686001bc2", 
    "_rev": "1-f87d54608d36cd2e28add67e88e416a4", 
    "date": [2011, 6, 7, 10, 55], 
    "volt": 107, 
    "ampere": 23.5 
} 

Sonra tasarım belge gibi bir şey dönüşeceğini:

{ 
    "_id": "_design/power", 
    "_rev": "1-7788287ab51c480c725498eba4f79ddb", 
    "language": "javascript", 
    "views": { 
     "watt": { 
      "map": "function(doc) {\n emit(doc.date, doc.volt * doc.ampere);\n}", 
      "reduce": "_sum" 
     } 
    } 
} 

Sen bilgilerin geri senin anahtarına dayalı olarak geliyor nasıl kontrol grubu seviyesini kullanabilirsiniz [ yıl, ay, gün, saat, dakika]. Grup seviyesi 1 bir yıl, 2 ay vb. Toplamları olacaktır. Bunun üzerine, başlangıç ​​ve bitiş tuşları ile filtreleyebilirsiniz.

GET db/_design/power/_view/watt?group_level=2

geri benzer bir şey sizi vermeli: Ayrıca istediğiniz bilgiye alabilirsiniz anahtar aralığı ile gruplama ve filtreleme bırakılıyor

{"rows":[ 
{"key":[2011,4],"value":1988.5}, 
{"key":[2011,5],"value":1988.5}, 
{"key":[2011,6],"value":7778.0} 
]} 

, ancak farklı bakacağız. değerleri azaltmak ve istemediğiniz ay süzmek önce gruba hem onları birleştiren

GET db/_design/power/_view/watt?startkey=[2011,4]&endkey=[2011,6]

{"rows":[ 
{"key":null,"value":3977.0} 
]} 

. Neyse

{"rows":[ 
{"key":[2011,4],"value":1988.5}, 
{"key":[2011,5],"value":1988.5} 
]} 

GET db/_design/power/_view/watt?startkey=[2011,4]&endkey=[2011,6]&group_level=2

, sadece bana da bu şeyleri hatırlamak yardımcı olur ... titiz olmaya çalışıyorum.

CouchDB HTTP View API - Query Options

DÜZENLEME:

Ben saate göre gruplandırmak isteyen sözü fark ettim. Gruplama seviyesini anahtarınızın saat bölümüne kadar devam ettirecektiniz.

GET db/_design/power/_view/watt?startkey=[2011,4]&endkey=[2011,6]&group_level=4

{"rows":[ 
{"key":[2011,4,9,11],"value":1988.5}, 
{"key":[2011,5,9,11],"value":1988.5} 
]} 

Ben benim test veritabanı çok yararlı bilgiler yoktu korkuyorum, ama ben nasıl kullanılabileceğini startkey/endkey ve group_level görüntülenen umut

.

0

Sen _sum yerleşik reduce olarak kullanabileceğiniz

GET db/_design/power/_view/watt?group_level=2&startkey=[2011,3]&endky=[2011,4]&inclusive_end=false 

Yani verir Mart ayı için toplamı.

biçimlenme
+0

Mart ayında kısıtlanmış saatlik saatlik değerlere sahip bir tablo hazırlamalıyım. Bu yüzden Mart ayının toplamı ile bir sayıya ihtiyacım yok. – fdb

İlgili konular