#javascript #couchdb
#javascript #couchdb
Вопрос:
Мне нужно получить документы в формате JSON
Вид выглядит следующим образом
function (doc) {
emit(doc._id);
}
Дизайн-документ выглядит следующим образом
{
"_id": "_design/rtls",
"_rev": "14-cad60060017c38957f6e4388cb37914b",
"views": {
"rtls": {
"map": "function (doc) {n emit(doc._id);n}"
}
},
"language": "javascript"
}
Когда я получу приведенные ниже данные для приведенной ниже ссылки `http://127.0.0.1:5984/rtls/_design/rtls/_view/rtls?include_docs=true
{"total_rows":4,"offset":0,"rows":[
{"id":"1",
"key":"1",
"value":null,
"doc":{
"_id":"1",
"_rev":"39-6ff9597a13572e831728c2e2631eb425",
"al":[{
"id16":"0x3f1a",
"pos":{"x":17.49,"y":10.97,"z":0.01}}],,
"tl":[],
"Timestamp":272179.0,
"Oid":"apoorva-VirtualBox",
"resultTime":"2021-01-03T23:02:29.059Z"}
}
........
]}
но мне это нужно в приведенном ниже формате
[
{"id":"1",
"key":"1",
"value":null,
"_id":"1",
"_rev":"39",
"al":[{
"id16":"0x3f1a",
"pos":{"x":17.49,"y":10.97,"z":0.01}}],
"tl":[],
"Timestamp":272179.0,
"Oid":"apoorva-VirtualBox",
"resultTime":"2021-01-03T23:02:29.059Z"
}
]
Я очень новичок в CouchDB. Любой вклад приветствуется.
Заранее спасибо.
Комментарии:
1. Представление создает индекс, который точно соответствует основному индексу, предоставляемому конечной точкой _all_docs. Почему? Кроме того, почему выходные данные должны быть в нужном вам формате? У вас нет контроля над обработкой клиента?
2. Потому что я назвал все одинаково, я думаю. Я должен прочитать JSON в Vue.js . если бы я мог заставить представление выдавать данные в формате JSON, весь процесс был бы простым.
Ответ №1:
CouchDB предлагает функции списка для преобразования результатов просмотра. Как вы можете видеть в документе, эти функции устарели в CouchDB 3.x и будут удалены в 4.x. Вы можете решить проблему в краткосрочной перспективе, но лучше не полагаться на это в долгосрочной перспективе
попробуйте определить функцию списка в вашем документе дизайна, подобную этой (элемент «списки»):
{
"_id": "_design/rtls",
"views": {
"rtls": {
"map": "function (doc) {n emit(doc._id, 1);n}"
}
},
"lists": {
"doc-list": "function (head,req) { start({'headers': {'Content-Type': 'application/json'}}); var row; var docs=[]; while (row = getRow()) {docs.push(row.doc)}; send(toJSON(docs)); }"
},
"language": "javascript"
}
и запрашиваем базу данных с помощью этой операции
/db/_design/rtls/_list/doc-list/rtls?include_docs=true
Поскольку это устарело, лучше поместить эту логику в ваше приложение.
Комментарии:
1. Спасибо за ваш ответ. Но я не могу использовать приведенный выше документ о дизайне. Я получаю сообщение об ошибке «Конфликт обновления документа».
2. Является атрибутом _rev, вы должны обновить свою редакцию. Я удалил _rev из моего примера.