Отображение документа CouchDB в формате JSON

#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 из моего примера.