CouchDb: Как удалить документы старше> 6 месяцев? - PullRequest
12 голосов
/ 20 июня 2011

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

Ответы [ 2 ]

7 голосов
/ 17 февраля 2012

Вы можете написать функцию обновления в 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"]
}

и вызов ... db / _design / updatefuncdesigndoc / _update / deletefunc / dok_id_x? Mindate = 20110816

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

5 голосов
/ 20 июня 2011

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

ОБНОВЛЕНИЕ:

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

eG

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...