"SQL birleştirmeleri" için CouchDB eşdeğeri arıyorum.CouchDB'de bire-çok "JOIN" yapmanın en iyi yolu
{ "type" : "el", "id" : "1", "content" : "first" }
{ "type" : "el", "id" : "2", "content" : "second" }
{ "type" : "el", "id" : "3", "content" : "third" }
listesini tanımlar bir belge yoktur: Benim örnekte
liste unsurlardır CouchDB belgeleri bulunmaktadır
{ "type" : "list", "elements" : ["2","1"] , "id" : "abc123" }
üçüncü unsur, onu silindi görebileceğiniz gibi artık listenin bir parçası değil. Yani sonucun bir parçası olmamalı. Şimdi, doğru sipariş dahil olmak üzere içerik öğelerini döndüren bir görünüm istiyorum.
sonucu olabilir: olması gerektiği gibi öğelerin sırası zaten bu durumda
{ "content" : ["second", "first"] }
. Bir diğer olası sonucu:
{ "content" : [{"content" : "first", "order" : 2},{"content" : "second", "order" : 1}] }
Ben haritası işlevini yazmaya başladı: Ancak bu kadar alabilirsiniz gibidir
map = function (doc) {
if (doc.type === 'el') {
emit(doc.id, {"content" : doc.content}); //emit the id and the content
exit;
}
if (doc.type === 'list') {
for (var i=0, l=doc.elements.length; i<l; ++i){
emit(doc.elements[i], { "order" : i }); //emit the id and the order
}
}
}
. Hatalarımı düzeltebilir ve bir azaltma işlevi yazabilir misin? Üçüncü belgenin sonucun bir parçası olmaması gerektiğini unutmayın.
Elbette farklı bir harita işlevi de yazabilirsiniz. Ancak belgelerin yapısı (bir tanım elemanı ve her bir giriş için bir giriş belgesi) değiştirilemez.
DÜZENLEME: o bu kısa nasıl yapılacağı anlatılmaktadır Onun cevabını, hiç JasonSmith yorumuna kaçırmayın.
Kelime, bu kapsamlı bir tanesidir. İyi iş jhs! –
Yanıltıcı şekilde uzun. Aslında adım # 2 tam bir çözüm, ancak evet, arka plan gereksinimleri ve istemci tarafında kolaylık eklemek için isteğe bağlı yollar ayrıntılı. – JasonSmith
CouchIO URL değişti, burada aynı makale için yeni bir tane var: http://couchio.tumblr.com/post/446015664/whats-new-in-apache-couchdb-011-part-two – Bdoserror