2012-05-01 13 views
22

foo öğesinin x olduğu tüm belgeleri silmek istiyorum. Oldukça basit bir operasyon gibi görünüyor, ama ben sadece bunu anlayamıyorum.CouchDB'deki birden çok belgeyi nasıl silebilirim?

Tek bir belgeyi nasıl sileceğimi biliyorum, ancak bu yeterince iyi değil - Bir kerede birkaç bin silmek zorunda kalabilirim.

CouchDB'deki belgeleri toplu nasıl silebilirim?

cevap

9

Doğru yol olup olmadığını bilmiyorum, ancak foo alanını görüntüleyen bir görünüm oluştur, silmek istediğiniz tüm belgelerinizin doc._id s görünümünü sorgula ve tüm belgelerinize toplu bir güncelleştirme yap . Yani iki (ideal olarak) kanepeye çağırır.

http://comments.gmane.org/gmane.comp.db.couchdb.user/11222

bu konuda gitmek için benzer bir yol vardır.

ben de zaman hiçbir şey yoktu çünkü bir şey, bunun üstesinden ve gerekli Bulk deletion of documents

+5

OK, ve ben bu arada okuduğum birkaç diğer eşyalar, tek adımlı toplu silme (veya güncelleme) yapıyor imkansız olduğunu görünüyor: böyle bakmak. Kendisine "veritabanı" adını veren bir şeyin bu özelliğe sahip olmayacağı hayret verici görünüyor, ama en azından şimdi istediğimi elde etmenin en az etkili yolunu biliyorum. Bilgi için teşekkürler. –

+11

Bu doğru. "Veritabanı" tanımı değişiyor. İnsanlar memcache'yi "önbellek" olarak adlandırırdı ve şimdi bir "bellek içi veritabanı" olarak kabul edilir. Bunun çelişkili olduğunu kabul ediyorum. Ancak öte yandan, eski tanım gerçekten doğru olmayan "SQL veritabanı" anlamına geliyordu. – JasonSmith

+0

gerçekten üzgün bir yol yok daha kolay bir yol yok ...: '( –

2

örneğin aşağıdaki doc._deleted=true silip güncellemek isteyen tüm belgeler üzerinde bir toplu güncelleme yap, yapmaya karar benim kendi uygulaması.

Sen/o bana ve hatalarından kendimi korumak için çok yararlı olduğu için here.

Güncelleme

, ben bir yedek eklendi bulmak artık bulunabilir bu araca özelliğini geri yükleyebilirsiniz Sürüm

+0

Çok yararlı, bu araç için çok teşekkürler – JoCuTo

0

Belgeleri silmek için biraz uzun bir yöntem denedim. İlk olarak silinmesini istediğim belgeleri çağıran map_fun adlı bir görünüm oluşturdum. Sonra görünümü yineledi ve saklanan o belgeleyen allt anahtarlarını ve O silmek toplu ile oldukça kolaydır onlara

map_fun = '''function(doc){ 
    if (doc.doc_type == 'classic'){ 
    emit(doc._id, doc) 
    }}''' 

deldoclist = [] 
for row in db.query(map_fun): 
    deldoclist.append(row.key) 

for item in deldoclist: 
    del db[item] 
0

silmek için del db [ '_ id'] kullandı: https://wiki.apache.org/couchdb/HTTP_Bulk_Document_API Hemen POST JSONs listesini _all_docs için böylece bağlantısı temel alınarak,

{"_id": "0", "_rev": "1-62657917", "_deleted": true} 
+0

Hayır, bu soruya cevap vermez. Ben bir şey eşdeğer gibi foo = 10 'DELETE gibi istedim. hala iki arama yapmalı, bir değil. –

İlgili konular