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

CouchDb: Как удалить документы старше> 6 месяцев?

У меня проблема с тем, что мне нравится "автоматически" удалять документы на моем диване, возраст которых не менее 6 месяцев. Мой экземпляр CouchDb работает на сервере linux, есть ли способ достичь этого достаточно просто (например, написать простую двухстрочную оболочку script)?

4b9b3361

Ответ 1

Вы можете написать функцию обновления в couchdb, которая удаляет документ по определенным критериям (вы можете использовать параметры при вызове функции):  http://wiki.apache.org/couchdb/Document_Update_Handlers#Creating_an_Update_Handler

(посмотрите "на месте" и представьте настройку "_delete: true" ).

что-то вроде

"deletefunc":
...
if(doc.created_at<req.query.mindate) {
  doc._deleted:true;
  return [doc, "deleted"]
}

и вызов   ... дб /_design/updatefuncdesigndoc/_update/deletefunc/dok_id_x? MinDate = 20110816

Единственная работа: вызов каждого документа в явной базе данных с помощью этой функции (сначала вызов _all_docs или _changes)

Ответ 2

Пока я знаю, CouchDB хранит каждую базу данных (со всеми документами) в одном файле(). Таким образом, вы не сможете найти определенный документ по его имени или добавленному дате.

UPDATE:

Я думаю, что единственным способом было бы добавить в каждый документ поле "_doc_created" (или "_doc_established" ) с меткой времени (сходство с SQLs NOW()). Затем создайте представление, которое отображает только идентификаторы документов значения полей "_doc_created":

например.

function(doc) {
  emit(doc._doc_created, doc._id); 
  //or just emit(doc._doc_created) 'couse views alsways return docIDs
}

а затем напишите script (eG a shell-script), который получает все эти идентификаторы и DATE (через curl), фильтрует его и затем (снова через curl) УДАЛЯЕТ все документы из базы данных, которые _doc_crated datetime старше 6 месяцев.