2009-09-23 14 views
10

Temel sorun - belgelerinimin "kategoriler" ve zaman damgaları olduğunu varsayalım. Son iki saat içinde olan bir zaman damgası "foo" kategorideki tüm belgeleri isterseniz, çok basit: Sorun I zaman geliyorBirden çok anahtar bir CouchDB görünümüne parametre olarak değişiyor

function (doc) { 
    emit([doc.category, doc.timestamp], null); 
} 

ve sonra sorgu

GET server:5894/.../myview?startKey=[foo, |now - 2 hours|]&endkey=[foo, |now|] 

olarak Son iki saat içinde veya bar kategorilerinde bir şeyler isteyin. Zaman umursamayacak olsaydım, doğrudan anahtar teslimi yoluyla doğrudan çekerim. maalesef aralıklarla böyle bir seçeneğim yok.

ben iki saatlik bloklar için zaman damgası yakalanması olduğunu bu arada yapıyor sona erdi ve sonra sorgu dışarı multiplexing'i Ne:

POST server:5894/.../myview 
keys=[[foo, 0 hours], [foo, 2 hours], [bar, 0 hours], [bar, 2 hours]] 

O inşaat, ama ben geri dönmek istiyorum eğer dağınık alacak büyük miktarda zaman (blok boyutuna bağlı olarak).

Tuşlara benzer bir görünüme birden çok startKey/endKey çifti göndermenin bir yolu var mı? Anahtarlar için gönderilebilen [] dizisi?

cevap

4

Muhtemelen iki soru sormaktan iyidir. CouchDB birçok eşzamanlı sorguyu oldukça iyi işleyebilir, böylece çeşitli süreçleri/konuları ve foo ve bar dokümanlarını ayrı ayrı sorgulayabilirsiniz.

CouchDB şu anda birden çok aralıklı sorguyu desteklememektedir. ORing ve ANDING tuşları bir sorguda hemen hemen gerçekleştirilemez.

+0

kuyruğu anahtarlar yoluyla VEYA tuşlarına basabilirsiniz, ancak evet. Teşekkürler. – kolosy

9

Sadece bunu yapmanıza izin veren bir CouchDB sorun talebi var. Sizin için çalışabilecek olan bilete 0.10.1'lik basit ve garantisiz bir yama ekledim. Bu benim için çalışıyor ve bana gibi şeyler yapalım: Benim bir tarih aralığı için birden fazla izleme kimlikleri genelinde tüm verileri almak sağlar POST vücudunda

{ 
    "keys": [ 
     { 
      "startkey": ["0240286524","2010","03","01"], 
      "endkey": ["0240286524","2010","03","07",{}] 
     }, 
     { 
      "startkey": ["0442257276","2010","03","01"], 
      "endkey": ["0442257276","2010","03","07",{}] 
     } 
    ] 
} 

. Sonuçları izleme kimliğine göre gruplandırmak için group=true&group_level=1 numaralı telefonu arayın. Daha derin grup seviyeleri, kimlik | yıl, izleme kimliği | yıl | ay vb. Izlenerek grup oluşturmama izin verir.

Birden çok bağlantı, 2000'i eşzamanlı olarak yapmak istediğim için benim için ölçeklenemeyen bir ek yük oldu :) (Hayır, bir Yeni görünüm bir seçenek değil - biz zaten veri ve bir görünüm için 400GB konumdayız!)

Sorun ve yama https://issues.apache.org/jira/browse/COUCHDB-523 adresindedir.

3

Bu, CouchDB'nin daha yeni sürümlerinde eklenmiştir. Ben eski bir soru biliyorum ama yaşımdayken başlangıçta buldum

{ 
    "queries": [ 
    { "startkey": 10, "endkey": 11 }, 
    { "startkey": 16, "endkey": 18 } 
    ] 
} 

: başlangıç ​​/ bitiş tuşlarının birden aralıklarını eklemek için, şuna benzer bir bedenle, görünümünüze bir POST isteği kullanabilirsiniz tam olarak bunu arıyor!

+0

Bunun için herhangi bir doc başvurusu var mı? – Isaac

+0

Henüz değil, henüz elimizde olmadığı için dokümanı düzeltme sözü verdim! Başka bir örnek yararlı https: // lornajane olsa, ben blog yaptım.net/posts/2017/multiple-search-keys-in-couchdb –

+0

Ah, API belgelerinin zaten var olduğunu öğrendim, buradalar: http://docs.couchdb.org/en/2.0.0/api /ddoc/views.html#sending-multiple-queries-to-a-view –