Как удалить несколько документов в CouchDB?
Я хочу удалить все документы, где foo
равно x. Кажется, это довольно простая операция, но я просто не могу понять.
Я знаю, как удалить отдельный документ, но это не очень хорошо - мне, возможно, придется удалить несколько тысяч за раз.
Как я могу удалить документы в CouchDB?
Ответы
Ответ 1
Я не знаю, правильно ли это, но создайте представление, которое предоставляет поле foo
, запросит представление для doc._id
всех ваших документов, которые вы хотите удалить, и сделайте массовое обновление для всех ваши документы. Таким образом, два (идеально) звонка на кушетку.
http://comments.gmane.org/gmane.comp.db.couchdb.user/11222
Имеет аналогичный путь.
Сделайте массовое обновление всех документов, которые вы хотите удалить и обновите doc._deleted=true
, следуя примеру Массовое удаление документов p >
Ответ 2
Мне также нужно было что-то для этого, и, поскольку в то время ничего не было, я решил сделать свою собственную реализацию.
Здесь вы можете найти .
Update
Так как это было очень полезно для меня и для того, чтобы защитить себя от ошибок, я добавил функцию резервного копирования/восстановления для этого инструмента, которая теперь может быть найдена на версии 0.2
Ответ 3
Я попробовал несколько длинный метод удаления документов. Сначала я создал представление под названием map_fun, которое вызвало документы, которые я хотел удалить. Затем я повторил просмотр и сохранил ключи всех документов и использовал del db ['_ id'], чтобы удалить их
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]
Ответ 4
Это довольно просто с массовым удалением: https://wiki.apache.org/couchdb/HTTP_Bulk_Document_API
Просто POST для _all_docs списка JSON, которые выглядят следующим образом:
{"_id": "0", "_rev": "1-62657917", "_deleted": true}