Ответ 1
Я могу придумать пару идей.
Использовать _all_docs
Вам не нужно брать все документы, только идентификатор и изменения. По умолчанию это все, что возвращает _all_docs. Вы можете сделать довольно большой запрос в пакете (документы 10k или 100k в то время должны быть точными).
Повторить, а затем удалить
Вы можете использовать запрос _all_docs
для получения идентификаторов всех проектных документов.
GET /db/_all_docs?startkey="_design/"&endkey="_design0"
Затем скопируйте их где-нибудь временными.
POST /_replicator
{ "source":"db", "target":"db_ddocs", "create_target":true
, "user_ctx": {"roles":["_admin"]}
, "doc_ids": ["_design/ddoc_1", "_design/ddoc_2", "etc..."]
}
Теперь вы можете просто удалить исходную базу данных и скопировать временную копию, заменив значения "source"
и "target"
.
Удаление vs "удаление"
Обратите внимание, что это действительно методы яблок и апельсинов. Удалив базу данных, вы удаляете историю изменений всех ее документов. Другими словами, вы не можете реплицировать эти события удаления в любую другую базу данных. Когда вы удаляете документ в CouchDB, он сохраняет запись об этом дележе. Если вы копируете эту базу данных, эти удаления будут отражены в целевом объекте. (CouchDB хранит "надгробные плиты", указывающие идентификатор документа, его историю изменений и его удаленное состояние.)
Это может быть или не быть важно для вас. Первая идея, вероятно, считается более "правильной", однако я вижу значение второго. Вы можете визуализировать всю программу, чтобы выполнить это в своей голове. Это всего несколько запросов, и все готово. Нет циклов в _all_docs
партиях, без головной боли. Ваша конкретная ситуация, вероятно, сделает очевидным, что лучше.