2012-05-01 20 views
22

मैं उन सभी दस्तावेजों को हटाना चाहता हूं जहां foox के बराबर है। एक सुंदर बुनियादी ऑपरेशन की तरह लगता है, लेकिन मैं इसे समझ नहीं सकता।मैं CouchDB में एकाधिक दस्तावेज़ कैसे हटा सकता हूं?

मुझे पता है कि एक व्यक्तिगत दस्तावेज़ को कैसे हटाया जाए, लेकिन यह पर्याप्त नहीं है - मुझे एक समय में कुछ हज़ारों को हटाना पड़ सकता है।

मैं CouchDB में दस्तावेज़ों को कैसे हटा सकता हूं?

उत्तर

9

मुझे नहीं पता कि यह सही तरीका है लेकिन foo फ़ील्ड का खुलासा करने वाला एक दृश्य बनाएं, अपने सभी दस्तावेज़ों के doc._id एस के लिए क्वेरी पूछें, और अपने सभी दस्तावेज़ों के खिलाफ थोक अपडेट करें । तो सोफे के लिए दो (आदर्श) कॉल।

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

इसके बारे में जाने के लिए एक समान तरीके से किया है।

सभी दस्तावेजों आप में Bulk deletion of documents

+5

ठीक तो लिंक के आधार पर, और कुछ अन्य लेख मैं इस बीच में पढ़ा है, ऐसा लगता है कि एक भी कदम थोक हटाएं (या अद्यतन) कर असंभव है: कि तरह लग रहे। यह बहुत चौंकाने वाला लगता है कि कुछ जो खुद को "डेटाबेस" कहता है, में यह सुविधा नहीं होगी, लेकिन कम से कम अब मुझे जो चाहिए वह पाने के लिए कम से कम अक्षम तरीका पता है। जानकारी के लिए धन्यवाद। –

+11

यह सच है। "डेटाबेस" की परिभाषा बदल रही है। लोग memcache को "कैश" कहते थे और अब इसे "इन-मेमोरी डेटाबेस" माना जाता है। मैं मानता हूं कि यह विघटनकारी है। लेकिन दूसरी ओर, पुरानी परिभाषा का अर्थ वास्तव में "एसक्यूएल डेटाबेस" था जो या तो सही नहीं था। – JasonSmith

+0

वास्तव में दुखी है और अधिक सुविधाजनक तरीका नहीं है ...: '( –

2

मैं भी कि संभालने के लिए और, के लिए कुछ के बाद से वहाँ समय में कुछ भी नहीं था की जरूरत उदाहरण का अनुसरण करते हटा सकते हैं और doc._deleted=true अपडेट करना चाहते हैं पर एक बहु-अपडेट करते हैं, मैं बनाने का फैसला किया मेरी अपना कार्यान्वयन

आप पा सकते हैं यह here.

अद्यतन

के बाद से यह मेरे लिए और व्यवस्था अपने आप गलतियों से बचाने के लिए काफी मददगार था, मैं एक बैकअप जोड़ा/इस उपकरण अब पर पाया जा सकता है कि करने के लिए सुविधा बहाल संस्करण 0.2

+0

बहुत उपयोगी, इस उपकरण के लिए बहुत बहुत धन्यवाद – JoCuTo

0

मैंने दस्तावेज़ों को हटाने के लिए कुछ हद तक लंबी कोशिश की। मैंने पहली बार map_fun नामक एक दृश्य बनाया जिसे दस्तावेजों को बुलाया गया था जिन्हें मैं हटाना चाहता था। मैं तो दृश्य के माध्यम से दोहराया और संग्रहीत allt वह दस्तावेजों की कुंजी और इस्तेमाल किया डेल db [ '_ आईडी'] उन्हें

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

को हटाने के लिए यह थोक के साथ हटाना काफी आसान है: https://wiki.apache.org/couchdb/HTTP_Bulk_Document_API बस पोस्ट JSONs की एक सूची _all_docs को ,

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

नहीं, यह सवाल का जवाब नहीं देता है। मैं कुछ कहां से चाहता हूं जैसे 'fLE = 10' से हटाएं। थोक संचालन का उपयोग करके, मैं चाहता था अभी भी दो कॉल करना है, एक नहीं। –

संबंधित मुद्दे