/{db}/_design/{ddoc}/_view/{view}
-
GET/{db}/_design/{ddoc}/_view/{view} -
Выполняет указанную функцию представления из указанного документа проекта.
- Параметры:
-
db – Имя базы данных
ddoc – Имя документа проекта
view – Имя функции представления
- Заголовки запроса:
-
-
Accept –
application/json
text/plain
-
- Параметры запроса:
-
conflicts (boolean) – Включать сведения о conflicts в ответ. Игнорируется, если
include_docsне равноtrue. По умолчанию —false.descending (boolean) – Возвращать документы в порядке убывания ключей. По умолчанию —
false.endkey (json) – Прекратить возвращать записи, когда будет достигнут указанный ключ.
end_key (json) – Псевдоним параметра
endkeyendkey_docid (string) – Прекратить возвращать записи, когда будет достигнут указанный идентификатор документа. Игнорируется, если
endkeyне задан.end_key_doc_id (string) – Псевдоним для
endkey_docid.group (boolean) – Группировать результаты с помощью функции reduce в группу или одну строку. Подразумевает, что
reduceравноtrue, а максимальное значение —group_level. По умолчанию —false.group_level (number) – Указать используемый уровень группировки. Подразумевает, что
groupравноtrue.include_docs (boolean) – Включать связанный документ в каждую строку. По умолчанию —
false.attachments (boolean) – Включать содержимое вложений, закодированное в Base64, в документы, включаемые при
include_docsравномtrue. Игнорируется, еслиinclude_docsне равноtrue. По умолчанию —false.att_encoding_info (boolean) – Включать сведения о кодировке в заглушки вложений, если
include_docsравноtrue, а конкретное вложение сжато. Игнорируется, еслиinclude_docsне равноtrue. По умолчанию —false.inclusive_end (boolean) – Указывает, следует ли включать указанный конечный ключ в результат. По умолчанию —
true.key (json) – Возвращать только документы, соответствующие указанному ключу.
keys (json-array) – Возвращать только документы, ключ которых совпадает с одним из ключей, указанных в массиве.
limit (number) – Ограничить количество возвращаемых документов указанным числом.
reduce (boolean) – Использовать функцию свёртки. По умолчанию —
true, если определена функция reduce.skip (number) – Пропустить указанное количество записей перед началом возврата результатов. По умолчанию —
0.sorted (boolean) – Сортировать возвращаемые строки (см. Сортировка возвращаемых строк). Установка значения
falseповышает производительность. Поляtotal_rowsиoffsetнедоступны, если этому параметру задано значениеfalse. По умолчанию —true.stable (boolean) – Следует ли возвращать результаты представления из стабильного набора шардов. По умолчанию —
false.stale (string) – Разрешить использовать результаты устаревшего представления. Поддерживаемые значения:
okиupdate_after.okэквивалентноstable=true&update=false.update_afterэквивалентноstable=true&update=lazy. Поведение по умолчанию эквивалентноstable=false&update=true. Обратите внимание: этот параметр устарел. Вместо него используйтеstableиupdate. Дополнительные сведения см. в разделе Генерация представлений.startkey (json) – Возвращать записи, начиная с указанного ключа.
start_key (json) – Псевдоним для
startkey.startkey_docid (string) – Возвращать записи, начиная с указанного идентификатора документа. Игнорируется, если
startkeyне задан.start_key_doc_id (string) – Псевдоним параметра
startkey_docidupdate (string) – Следует ли обновить соответствующее представление перед отправкой ответа пользователю. Поддерживаемые значения:
true,false,lazy. По умолчанию —true.update_seq (boolean) – Следует ли включать в ответ значение
update_seq, указывающее идентификатор последовательности базы данных, отражённой в представлении. По умолчанию —false.
- Заголовки ответа:
-
-
application/json
text/plain; charset=utf-8
ETag – Подпись ответа
Transfer-Encoding –
chunked
-
- Объект JSON ответа:
-
offset (number) – Смещение, с которого начинается список документов.
rows (array) – Массив объектов строк представления. По умолчанию возвращаемые сведения содержат только идентификатор и ревизию документа.
total_rows (number) – Количество документов в базе данных/представлении.
update_seq (object) – Текущая последовательность обновлений базы данных.
- Коды состояния:
-
200 OK – Запрос успешно выполнен
400 Bad Request – Недопустимый запрос
401 Unauthorized – Требуется разрешение на чтение
403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными
404 Not Found – Указанная база данных, документ проекта или представление не найдены
Запрос:
GET /recipes/_design/ingredients/_view/by_name HTTP/1.1 Accept: application/json Host: localhost:5984
Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Wed, 21 Aug 2013 09:12:06 GMT ETag: "2FOLSBSW4O6WB798XU4AQYA9B" Server: CouchDB (Erlang/OTP) Transfer-Encoding: chunked { "offset": 0, "rows": [ { "id": "SpaghettiWithMeatballs", "key": "meatballs", "value": 1 }, { "id": "SpaghettiWithMeatballs", "key": "spaghetti", "value": 1 }, { "id": "SpaghettiWithMeatballs", "key": "tomato sauce", "value": 1 } ], "total_rows": 3 }
Изменено в версии 1.6.0: добавлены параметры attachments и att_encoding_info
Изменено в версии 2.0.0: добавлен параметр sorted
Изменено в версии 2.1.0: добавлены параметры stable и update
Изменено в версии 3.3.1: одиночный элемент keys обрабатывается как key
Предупреждение
Не рекомендуется использовать параметр attachments для включения вложений в результаты представления, если вложения имеют большой размер. Также учтите, что кодирование Base64 увеличивает объём передаваемых данных для вложений на 33% (то есть на одну треть).
-
POST/{db}/_design/{ddoc}/_view/{view} -
Выполняет указанную функцию представления из указанного документа проекта. Функциональность представления для POST поддерживает те же параметры и поведение, что и указано в API
GET /{db}/_design/{ddoc}/_view/{view}, но позволяет передавать параметры строки запроса в виде ключей объекта JSON в теле запроса POST.Запрос:
POST /recipes/_design/ingredients/_view/by_name HTTP/1.1 Accept: application/json Content-Length: 37 Host: localhost:5984 { "keys": [ "meatballs", "spaghetti" ] }Ответ:
HTTP/1.1 200 OK Cache-Control: must-revalidate Content-Type: application/json Date: Wed, 21 Aug 2013 09:14:13 GMT ETag: "6R5NM8E872JIJF796VF7WI3FZ" Server: CouchDB (Erlang/OTP) Transfer-Encoding: chunked { "offset": 0, "rows": [ { "id": "SpaghettiWithMeatballs", "key": "meatballs", "value": 1 }, { "id": "SpaghettiWithMeatballs", "key": "spaghetti", "value": 1 } ], "total_rows": 3 }
Параметры представления
В документе проекта можно задать два параметра индексирования представления в виде логических свойств объекта options. В отличие от остальных параметров запроса, они не являются параметрами URL, поскольку влияют на создание индекса представления, а не на доступ к нему:
local_seq (boolean): Делает локальные номера последовательности документов доступными функциям map (как свойство документа
_local_seq)include_design (boolean): Позволяет вызывать функции map для документов проекта, а также для обычных документов
Запросы к представлениям и индексам
Определение представления в документе проекта также создаёт индекс на основе сведений о ключах, заданных в каждом представлении. Создание и использование индекса значительно повышает скорость доступа и поиска или выбора документов из представления.
Однако индекс не обновляется при добавлении или изменении документов в базе данных. Вместо этого индекс создаётся или обновляется при первом обращении к представлению либо при обращении к нему после обновления документа. В обоих случаях индекс обновляется до выполнения запроса к представлению в базе данных.
Индексы представлений обновляются инкрементально в следующих случаях:
В базу данных добавлен новый документ.
Документ удалён из базы данных.
Документ в базе данных обновлён.
Индексы представления перестраиваются полностью при изменении его определения. Для этого при обновлении документа проекта создаётся fingerprint определения представления. Если отпечаток изменился, индексы представления перестраиваются полностью. Это гарантирует, что изменения определений представлений отражаются в их индексах.
Примечание
Индексы представления перестраиваются, когда для одного представления из той же группы представлений (то есть для всех представлений, определённых в одном документе проекта) определяется необходимость перестроения. Например, если в документе проекта определено несколько представлений и вы обновляете базу данных, будут обновлены все три индекса представлений в этом документе проекта.
Поскольку представление обновляется при выполнении запроса к нему, при обращении к нему может возникнуть задержка возврата данных, особенно если в базе данных много документов, а индекс представления ещё не создан. Существует несколько способов уменьшить, но не полностью устранить, эти проблемы. К ним относятся:
Создайте определение представления (и соответствующие документы проекта) в базе данных до того, как разрешить добавление или обновление документов. Если это сделать, пока к представлению обращаются, индекс можно обновлять инкрементально.
Вручную выполните запрос к представлению в базе данных. Это можно сделать до того, как пользователям будет разрешено использовать представление, или вручную обратиться к нему после добавления или обновления документов.
Используйте ленту изменений для отслеживания изменений в базе данных, а затем обратитесь к представлению, чтобы инициировать обновление соответствующего индекса.
Ни один из этих способов не позволяет полностью исключить необходимость перестраивать или обновлять индексы при обращении к представлению, однако они могут снизить влияние обновления индекса на удобство работы конечных пользователей.
Другой вариант — разрешить пользователям обращаться к «устаревшей» версии индекса представления, вместо того чтобы принудительно обновлять индекс и отображать обновлённые результаты. Устаревшее представление может не содержать новейших данных, но вернёт результаты запроса к представлению, используя существующую версию индекса.
Например, чтобы обратиться к существующему устаревшему представлению by_recipe в документе проекта recipes:
http://localhost:5984/recipes/_design/recipes/_view/by_recipe?stale=ok
Обращение к устаревшему представлению:
Не инициирует перестроение индексов представления, даже если после последнего обращения произошли изменения.
Возвращает текущую версию индекса представления, если она существует.
Возвращает пустой набор результатов, если указанный индекс представления не существует.
Также можно использовать значение update_after для параметра stale. В этом случае представление возвращается как устаревшее, но процесс обновления запускается после передачи сведений о представлении клиенту.
Помимо устаревших представлений, можно использовать аргумент запроса update_seq. Этот аргумент позволяет получить сведения о представлении, включая последовательность обновлений базы данных, на основе которой оно было создано. Возвращённое значение можно сравнить с текущей последовательностью обновлений, представленной в сведениях о базе данных (возвращаемых запросом GET /{db}).
Сортировка возвращаемых строк
Каждый элемент возвращаемого массива сортируется с использованием встроенной сортировки UTF-8 в соответствии с содержимым части ключа сгенерированных данных. Основной порядок вывода следующий:
nullfalsetrueЧисла
Текст (с учётом регистра, сначала строчные буквы)
Массивы (в соответствии со значениями каждого элемента, по порядку)
Объекты (в соответствии со значениями ключей, в порядке ключей)
Запрос:
GET /db/_design/test/_view/sorting HTTP/1.1 Accept: application/json Host: localhost:5984
Ответ:
HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Wed, 21 Aug 2013 10:09:25 GMT
ETag: "8LA1LZPQ37B6R9U8BK9BGQH27"
Server: CouchDB (Erlang/OTP)
Transfer-Encoding: chunked
{
"offset": 0,
"rows": [
{
"id": "dummy-doc",
"key": null,
"value": null
},
{
"id": "dummy-doc",
"key": false,
"value": null
},
{
"id": "dummy-doc",
"key": true,
"value": null
},
{
"id": "dummy-doc",
"key": 0,
"value": null
},
{
"id": "dummy-doc",
"key": 1,
"value": null
},
{
"id": "dummy-doc",
"key": 10,
"value": null
},
{
"id": "dummy-doc",
"key": 42,
"value": null
},
{
"id": "dummy-doc",
"key": "10",
"value": null
},
{
"id": "dummy-doc",
"key": "hello",
"value": null
},
{
"id": "dummy-doc",
"key": "Hello",
"value": null
},
{
"id": "dummy-doc",
"key": "\u043f\u0440\u0438\u0432\u0435\u0442",
"value": null
},
{
"id": "dummy-doc",
"key": [],
"value": null
},
{
"id": "dummy-doc",
"key": [
1,
2,
3
],
"value": null
},
{
"id": "dummy-doc",
"key": [
2,
3
],
"value": null
},
{
"id": "dummy-doc",
"key": [
3
],
"value": null
},
{
"id": "dummy-doc",
"key": {},
"value": null
},
{
"id": "dummy-doc",
"key": {
"foo": "bar"
},
"value": null
}
],
"total_rows": 17
} Порядок возвращаемых данных представления можно изменить на обратный, задав для значения запроса descending значение true:
Запрос:
GET /db/_design/test/_view/sorting?descending=true HTTP/1.1 Accept: application/json Host: localhost:5984
Ответ:
HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Wed, 21 Aug 2013 10:09:25 GMT
ETag: "Z4N468R15JBT98OM0AMNSR8U"
Server: CouchDB (Erlang/OTP)
Transfer-Encoding: chunked
{
"offset": 0,
"rows": [
{
"id": "dummy-doc",
"key": {
"foo": "bar"
},
"value": null
},
{
"id": "dummy-doc",
"key": {},
"value": null
},
{
"id": "dummy-doc",
"key": [
3
],
"value": null
},
{
"id": "dummy-doc",
"key": [
2,
3
],
"value": null
},
{
"id": "dummy-doc",
"key": [
1,
2,
3
],
"value": null
},
{
"id": "dummy-doc",
"key": [],
"value": null
},
{
"id": "dummy-doc",
"key": "\u043f\u0440\u0438\u0432\u0435\u0442",
"value": null
},
{
"id": "dummy-doc",
"key": "Hello",
"value": null
},
{
"id": "dummy-doc",
"key": "hello",
"value": null
},
{
"id": "dummy-doc",
"key": "10",
"value": null
},
{
"id": "dummy-doc",
"key": 42,
"value": null
},
{
"id": "dummy-doc",
"key": 10,
"value": null
},
{
"id": "dummy-doc",
"key": 1,
"value": null
},
{
"id": "dummy-doc",
"key": 0,
"value": null
},
{
"id": "dummy-doc",
"key": true,
"value": null
},
{
"id": "dummy-doc",
"key": false,
"value": null
},
{
"id": "dummy-doc",
"key": null,
"value": null
}
],
"total_rows": 17
} Порядок сортировки и startkey/endkey
Направление сортировки применяется до фильтрации с использованием аргументов запроса startkey и endkey. Например, следующий запрос корректно перечислит все соответствующие записи между carrots и egg:
GET http://couchdb:5984/recipes/_design/recipes/_view/by_ingredient?startkey="carrots"&endkey="egg" HTTP/1.1 Accept: application/json
Если изменить порядок вывода на обратный с помощью аргумента запроса descending, запрос к представлению вернёт ответ 400 Bad Request:
GET /recipes/_design/recipes/_view/by_ingredient?descending=true&startkey="carrots"&endkey="egg" HTTP/1.1
Accept: application/json
Host: localhost:5984
{
"error": "query_parse_error",
"reason": "No rows can match your key range, reverse your start_key and end_key or set descending=false",
"ref": 3986383855
} Результатом будет ошибка, поскольку записи в представлении сначала меняются местами и только затем применяется фильтр по ключу, поэтому endkey для «egg» будет обнаружен раньше, чем startkey для «carrots».
Вместо этого следует изменить порядок значений, передаваемых параметрам startkey и endkey, чтобы он соответствовал сортировке ключей по убыванию. Изменив предыдущий пример следующим образом:
GET /recipes/_design/recipes/_view/by_ingredient?descending=true&startkey="egg"&endkey="carrots" HTTP/1.1 Accept: application/json Host: localhost:5984
Использование key, keys, start_key и end_key
key: ведёт себя так же, как при задании start_key=$key&end_key=$key.
keys: между одноэлементным keys и многоэлементным keys есть некоторые различия. Одноэлементный keys следует обрабатывать как key.
$ curl -X POST http://adm:pass@127.0.0.1:5984/db/_bulk_docs \
-H 'Content-Type: application/json' \
-d '{"docs":[{"_id":"a","key":"a","value":1},{"_id":"b","key":"b","value":2},{"_id":"c","key":"c","value":3}]}'
$ curl -X POST http://adm:pass@127.0.0.1:5984/db \
-H 'Content-Type: application/json' \
-d '{"_id":"_design/ddoc","views":{"reduce":{"map":"function(doc) { emit(doc.key, doc.value) }","reduce":"_sum"}}}'
$ curl http://adm:pass@127.0.0.1:5984/db/_design/ddoc/_view/reduce'?key="a"'
{"rows":[{"key":null,"value":1}]}
$ curl http://adm:pass@127.0.0.1:5984/db/_design/ddoc/_view/reduce'?keys="[\"a\"]"'
{"rows":[{"key":null,"value":1}]}
$ curl http://adm:pass@127.0.0.1:5984/db/_design/ddoc/_view/reduce'?keys=\["a","b"\]'
{"error":"query_parse_error","reason":"Multi-key fetches for reduce views must use `group=true`"}
$ curl http://adm:pass@127.0.0.1:5984/db/_design/ddoc/_view/reduce'?keys=\["a","c"\]&group=true'
{"rows":[{"key":"a","value":1},{"key":"c","value":3}]} keys несовместим с key, start_key и end_key, однако key можно использовать вместе с start_key и end_key. Разный порядок параметров запроса может привести к разным ответам. Приоритет определяется порядком указания параметров запроса. Обычно действует последний аргумент.
# start_key=a and end_key=b
$ curl http://adm:pass@127.0.0.1:5984/db/_design/ddoc/_view/reduce'?key="a"&endkey="b"'
{"rows":[{"key":null,"value":3}]}
# start_key=a and end_key=a
$ curl http://adm:pass@127.0.0.1:5984/db/_design/ddoc/_view/reduce'?endkey="b"&key="a"'
{"rows":[{"key":null,"value":1}]}
# start_key=a and end_key=a
$ curl http://adm:pass@127.0.0.1:5984/db/_design/ddoc/_view/reduce'?endkey="b"&keys=\["a"\]'
{"rows":[{"key":null,"value":1}]}
$ curl http://adm:pass@127.0.0.1:5984/db/_design/ddoc/_view/reduce'?endkey="b"&keys=\["a","b"\]'
{"error":"query_parse_error","reason":"Multi-key fetches for reduce views must use `group=true`"}
$ curl http://adm:pass@127.0.0.1:5984/db/_design/ddoc/_view/reduce'?endkey="b"&keys=\["a","b"\]&group=true'
{"error":"query_parse_error","reason":"`keys` is incompatible with `key`, `start_key` and `end_key`"} Необработанная сортировка
По умолчанию CouchDB использует драйвер ICU для сортировки результатов представления. Для более быстрой сборки представлений можно использовать двоичную сортировку, если сортировка Unicode не важна.
Чтобы использовать необработанную сортировку, добавьте "options":{"collation":"raw"} в объект представления документа проекта. После этого представления будут сгенерированы заново, и для соответствующего представления будет применён новый порядок.
См. также
Использование ограничений и пропуск строк
По умолчанию представления возвращают все результаты. Это подходит, когда результатов немного, но может привести к проблемам, если их миллиарды: клиенту, возможно, придётся прочитать их все и использовать всю доступную память.
Однако количество строк результата можно сократить, указав параметр запроса limit. Например, запрос списка рецептов с помощью представления by_title с ограничением в 5 вернёт только 5 записей, хотя всего в представлении 2667 записей:
Запрос:
GET /recipes/_design/recipes/_view/by_title?limit=5 HTTP/1.1 Accept: application/json Host: localhost:5984
Ответ:
HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Wed, 21 Aug 2013 09:14:13 GMT
ETag: "9Q6Q2GZKPH8D5F8L7PB6DBSS9"
Server: CouchDB (Erlang/OTP)
Transfer-Encoding: chunked
{
"offset" : 0,
"rows" : [
{
"id" : "3-tiersalmonspinachandavocadoterrine",
"key" : "3-tier salmon, spinach and avocado terrine",
"value" : [
null,
"3-tier salmon, spinach and avocado terrine"
]
},
{
"id" : "Aberffrawcake",
"key" : "Aberffraw cake",
"value" : [
null,
"Aberffraw cake"
]
},
{
"id" : "Adukiandorangecasserole-microwave",
"key" : "Aduki and orange casserole - microwave",
"value" : [
null,
"Aduki and orange casserole - microwave"
]
},
{
"id" : "Aioli-garlicmayonnaise",
"key" : "Aioli - garlic mayonnaise",
"value" : [
null,
"Aioli - garlic mayonnaise"
]
},
{
"id" : "Alabamapeanutchicken",
"key" : "Alabama peanut chicken",
"value" : [
null,
"Alabama peanut chicken"
]
}
],
"total_rows" : 2667
} Чтобы пропустить некоторые записи, можно использовать параметр запроса skip:
Запрос:
GET /recipes/_design/recipes/_view/by_title?limit=3&skip=2 HTTP/1.1 Accept: application/json Host: localhost:5984
Ответ:
HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Wed, 21 Aug 2013 09:14:13 GMT
ETag: "H3G7YZSNIVRRHO5FXPE16NJHN"
Server: CouchDB (Erlang/OTP)
Transfer-Encoding: chunked
{
"offset" : 2,
"rows" : [
{
"id" : "Adukiandorangecasserole-microwave",
"key" : "Aduki and orange casserole - microwave",
"value" : [
null,
"Aduki and orange casserole - microwave"
]
},
{
"id" : "Aioli-garlicmayonnaise",
"key" : "Aioli - garlic mayonnaise",
"value" : [
null,
"Aioli - garlic mayonnaise"
]
},
{
"id" : "Alabamapeanutchicken",
"key" : "Alabama peanut chicken",
"value" : [
null,
"Alabama peanut chicken"
]
}
],
"total_rows" : 2667
} Предупреждение
Не рекомендуется использовать параметры limit и skip для разбиения результатов на страницы. Узнайте в разделе рецепт постраничной навигации, почему это так и как сделать лучше.
Отправка нескольких запросов к представлению
Добавлено в версии 2.2.
-
POST/{db}/_design/{ddoc}/_view/{view}/queries -
Выполняет несколько указанных запросов к функции представления из указанного документа проекта.
- Параметры:
-
db – Имя базы данных
ddoc – Имя документа проекта
view – Имя функции представления
- Заголовки запроса:
-
-
application/json
-
Accept –
application/json
-
- Объект JSON запроса:
-
queries – Массив объектов запросов с полями, содержащими параметры каждого отдельного запроса к представлению. Имена полей и их значения совпадают с параметрами запроса обычного запроса к представлению.
- Заголовки ответа:
-
-
application/json
ETag – Подпись ответа
Transfer-Encoding –
chunked
-
- Объект JSON ответа:
-
results (array) – Массив объектов результатов — по одному для каждого запроса. Каждый объект результата содержит те же поля, что и ответ на обычный запрос к представлению.
- Коды состояния:
-
200 OK – Запрос успешно выполнен
400 Bad Request – Недопустимый запрос
401 Unauthorized – Требуется разрешение на чтение
403 Forbidden – Недостаточно прав / Слишком много запросов с недействительными учётными данными
404 Not Found – Указанная база данных, документ проекта или представление не найдены
500 Internal Server Error – Ошибка выполнения функции представления
Запрос:
POST /recipes/_design/recipes/_view/by_title/queries HTTP/1.1
Content-Type: application/json
Accept: application/json
Host: localhost:5984
{
"queries": [
{
"keys": [
"meatballs",
"spaghetti"
]
},
{
"limit": 3,
"skip": 2
}
]
} Ответ:
HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Wed, 20 Dec 2016 11:17:07 GMT
ETag: "1H8RGBCK3ABY6ACDM7ZSC30QK"
Server: CouchDB (Erlang/OTP)
Transfer-Encoding: chunked
{
"results" : [
{
"offset": 0,
"rows": [
{
"id": "SpaghettiWithMeatballs",
"key": "meatballs",
"value": 1
},
{
"id": "SpaghettiWithMeatballs",
"key": "spaghetti",
"value": 1
},
{
"id": "SpaghettiWithMeatballs",
"key": "tomato sauce",
"value": 1
}
],
"total_rows": 3
},
{
"offset" : 2,
"rows" : [
{
"id" : "Adukiandorangecasserole-microwave",
"key" : "Aduki and orange casserole - microwave",
"value" : [
null,
"Aduki and orange casserole - microwave"
]
},
{
"id" : "Aioli-garlicmayonnaise",
"key" : "Aioli - garlic mayonnaise",
"value" : [
null,
"Aioli - garlic mayonnaise"
]
},
{
"id" : "Alabamapeanutchicken",
"key" : "Alabama peanut chicken",
"value" : [
null,
"Alabama peanut chicken"
]
}
],
"total_rows" : 2667
}
]
}
Copyright © 2025 The Apache Software Foundation — Licensed under the Apache License 2.0
https://docs.couchdb.org/en/3.5.1/api/ddoc/views.html