Подтвердить что ты не робот

Как удалить несколько документов в CouchDB?

Я хочу удалить все документы, где foo равно x. Кажется, это довольно простая операция, но я просто не могу понять.

Я знаю, как удалить отдельный документ, но это не очень хорошо - мне, возможно, придется удалить несколько тысяч за раз.

Как я могу удалить документы в CouchDB?

4b9b3361

Ответ 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}