2011-05-28 21 views
5

CouchDB'deki kayıtları döndürmek için bir anahtarı veya aralığı iletebileceğinizi biliyorum, ancak böyle bir şey yapmak istiyorum. X değerleri olan X kayıtlarını bulun. Örneğin, düzenli SQL'de, 5, 7, 29, 102 olan ids ile kayıtları iade etmek istediğimi söyleyebilirim. Böyle bir şey yapacağını:CouchDB ile birleşik anahtar, birden çok kayıt bulma

SELECT * FROM sometable WHERE id = 5 OR id = 7 or id = 29 or id = 102 

o ben anahtar dizide bulmak istediğiniz tüm değerleri atmak CouchDB, bunu yapmak mümkün mü ve sonra CouchDB var olabileceği O kayıtların hepsi arar "anahtar parametresi"?

cevap

4

Bir POST as documented on CouchDB wiki yapabilirsiniz. Anahtarın listesini isteğin gövdesine iletirsiniz.

{"keys": ["key1", "key2", ...]} 

olumsuz bir POST isteği tarayıcı tarafından önbelleğe olmamasıdır.

Alternatif olarak, aynı yanıtı keys parametresiyle bir GET kullanarak elde edebilirsiniz. Düzgün URL kodlu,

/DB/_all_docs?keys=["ID1","ID2"]&include_docs=true 

, olur: Örneğin, görünümüyle _all_docs sorgulayabilir

/DB/_all_docs?keys=%5B%22ID1%22,%22ID2%22%5D&include_docs=true 

bu daha iyi önbelleğe alınabilirliğini vermelidir, ama unutmayın her dokümanın güncelleme de _all_docs değişiklikler . Bazen, kendi görüşünüzü yalnızca gerekli belgelerle tanımlayarak bu sorunu çözebilirsiniz.

+1

Ve performans bir sorgu ile aynı değil (bir dizi anahtar için bile). Dahili olarak, CouchDB sadece tuşların her birinin arayışını yeniden çalıştırır. Tek yapmanız gereken, gidiş gelişli HTTP gecikmesidir. (Ayrıca kodunuz daha az hata ile daha basit olabilir.) – JasonSmith

2

Düz görüş işleviyle, bu mümkün olmaz. Ancak, aynı sonucu elde etmek için _list işlevini kullanabilirsiniz.

+0

Herhangi bir görünümde (hatta _all_docs) yapabilirsiniz, ancak bir GET yerine bir POST yapmalısınız. –

+2

Bir anahtar listesiyle POST yapmak bir geçici çözümdür. Sözdizimsel şeker değil, aynı şey ama daha uygun. ** ** aynı şey değil. Dahili olarak, CouchDB her bir tuşa birer birer bakar. Performans ve ölçeklenebilirlik bir GET anahtarı (veya anahtar aralığı) aramasıyla aynı değildir. Ancak Marcello cevabında gösterdiği gibi, gerçekten çok uygun olabilir. – JasonSmith

+0

Anahtarların listesinin her zaman aynı olup olmadığını veya "çalışma zamanı" nda anahtarların listesini belirtebilmenizi isteyip istemediğinizi düşünüyorum. Liste sabit bir liste ise, eşleşen belgeleri döndüren tek bir dizin (_list işlevi) oluşturabilirsiniz. Liste keyfi (bir parametre) ise, o zaman couchdb her anahtar için "aramayı çalıştırır" gerekir, böylece POST yönteminden daha iyi olamaz. –

İlgili konular