CouchDB
Перейти к навигации
Перейти к поиску
Установка
Ubuntu 12.04:
add-apt-repository ppa:nilya/couchdb-1.3 apt-get update apt-get install couchdb
Версии свежее чем 1.3 на Ubuntu 12.04 не поставить так как слишком старый Erlang.
Разное
Запрос документа
curl -X GET http://localhost:5984/test19/id
Создание views
Пример создания двух view, выбирающих документы с конфликтами и документы с полем type=task:
{ "_id":"_design/tasks", "language": "javascript", "views": { "all": { "map": "function(doc) { if (doc.type == 'task') emit(null, doc) }" }, "conflicts": { "map": "function(doc) { if (doc._conflicts) emit(doc._conflicts, null) }" } } }
http://wiki.apache.org/couchdb/HTTP_view_API
Запрос списка конфликтов
curl -X GET http://localhost:5984/test19/_design/tasks/_view/conflicts
Удаление документа с заданной ревизией (актуально для конфликта)
curl -X DELETE http://localhost:5984/test19/id?rev=revision
Запуск репликации
curl -X POST http://127.0.0.1:5984/_replicate \ -d '{"source":"test13", "target":"http://user:password@foo.ru:5984/test13", "continuous":true}' -H "Content-Type: application/json"
Отслеживание изменений
curl -X GET "http://localhost:5984/test19/_changes?feed=continuous&since=1"
Создание фильтра
Пример фильтра, пропускающего только документы с конфликтами:
{ "_id": "_design/app", "filters": { "conflicts": "function(doc, req) { if ( doc._conflicts ) { return true; } else { return false; } } " } }
Отслеживание изменений с фильтром
curl -X GET "http://localhost:5984/test19/_changes?filter=app/conflicts&feed=continuous&since=1"
Включение Erlang query server
Разрешает создавать функции на языке Erlang. В файле /etc/couchdb/local.ini добавить:
[native_query_servers] erlang = {couch_native_process, start_link, []}
Проверка документа (validate_doc_update)
Если размер базы больше заданного, то запрещаем создавать документ:
{ "_id": "_design/validation", "language": "erlang", "validate_doc_update": "fun(NewDoc, OldDoc, {UserCtx}, SecObj) -> DbName = couch_util:get_value(<<"db">>, UserCtx), {ok, Db} = couch_db:open_int(DbName, [{user_ctx, UserCtx}]), {ok, Info} = couch_db:get_db_info(Db), DiskSize = couch_util:get_value(data_size, Info), case DiskSize < 100000 of %% ~100KB true -> ok; false -> case OldDoc of null -> throw({[{<<"forbidden">>, <<"quota limit reached">>}]}); _ -> 1 end end, 1 end." }
Работает в CouchDB 1.3, 1.5. В 1.4 не работает и в следующих версиях работа не гарантируется
Глава в "CouchDB: The Definitive Guide"
Проверка размера вложения пока невозможна
Примеры функций на Erlang (официальная wiki)