Я хотел бы запросить список конкретных документов одним вызовом CouchDB.
С SQL я бы сделал что-то вроде
SELECT *
FROM database.table
WHERE database.table.id
IN (2,4,56);
Как это сделать в CouchDB с помощью _id
или другого поля?
Я хотел бы запросить список конкретных документов одним вызовом CouchDB.
С SQL я бы сделал что-то вроде
SELECT *
FROM database.table
WHERE database.table.id
IN (2,4,56);
Как это сделать в CouchDB с помощью _id
или другого поля?
Вам нужно использовать представления keys
параметр запроса для получения записей с ключами в указанном наборе.
function(doc){
emit(doc.table.id, null);
}
А потом
GET /db/_design/ddoc_name/_view/by_table_id?keys=[2,4,56]
Чтобы получить содержимое документа одновременно, просто добавьте параметр запроса include_docs=True
к вашему запросу.
UPD: Возможно, вам будет интересно получить документы по этим идентификаторам ссылок (2,4,56). По умолчанию CouchDB просматривает «сопоставляет» выданные ключи с документами, которым они принадлежат. Чтобы изменить это поведение, вы можете использовать трюк с связанными документами:
function(doc){
emit(doc.table.id, {'_id': doc.table.id});
}
А теперь запрос
GET /db/_design/ddoc_name/_view/by_table_id?keys=[2,4,56]&include_docs=True
вернет строки с полем id
, указывающим на документ, который содержит ключи 2
, 4
и 56
, и doc
, который содержит ссылочное содержимое документа.
keys
в URL-адресе многое проясняет для меня. У меня только что было Ага! момент. спасибо (ps. Орфографическая ошибка в ссылке «связанные документы»)
- person johowie; 07.10.2012
В CouchDB Bulk document APi используется для этого:
curl -d '{"keys":["2","4", "56"]}' -X POST http://127.0.0.1:5984/foo/_all_docs?include_docs=true
http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API
view
, которая выдает emit(doc._id, doc)
ИЛИ emit(doc._id, doc._id)
с ?include_docs=true
- person johowie; 11.10.2012