Получить одно значение из документа - PullRequest
6 голосов
/ 14 сентября 2011

Есть ли в CouchDB возможность извлечь одно значение из документа?Например, у меня есть документ с 10000 ключами, подобный этому:

{
   "_id": "8098091cc795acde43cd45335373cc92",
   "_rev": "2-6d2e0ac43618388cc958b91e5015bba5",
   "1":"some value",
   "2":"another value",
   ...
   "10000":"last value"
}

, и я не хочу каждый раз анализировать весь документ, а просто хочу получить значение ключа "2".Возможно ли это?

РЕДАКТИРОВАТЬ:

Конечно, прежде чем задавать этот вопрос, я просматривал документы и гуглил вокруг, но не нашел такой возможности.Но мне интересно, почему это невозможно?Насколько я понимаю, между представлением и документом не так уж много различий, поскольку оба они являются наборами пар ключ-значение, но можно получить одно значение из представления, используя ?key=... в строке запроса, и невозможно сделать то же самое.для документа.Почему?

Ответы [ 2 ]

9 голосов
/ 14 сентября 2011

Вы можете использовать функцию показа CouchDB для обработки документа на сервере и отправки произвольных данных клиенту.Функции Show могут выполнять простые действия, такие как извлечение одного значения из документа;или они могут преобразовываться в совершенно другой тип контента, такой как XML.

Например:

  • В базе данных db
  • , которая имеет проектный документ _design/example с функцией показа one_field
  • вы хотите получить документ с идентификатором doc_id
  • , но получить только поле some_field со значением "I am the some_field value!"

Этот запрос будет выглядеть следующим образом:

GET /db/_design/example/_show/one_field/doc_id?name=some_field

Функция показа будет выглядеть следующим образом:

function(doc, req) {
  // _show function to extract one field

  var field_name = req.query.name; // Set to e.g. "some_field"
  var field_value = doc[field_name];

  return { "code": 200   // HTTP status code
         , "headers":    // Response headers
           { "content-type": "text/plain" }
         , body: field_value
         };
}

Проектный документ будет выглядеть так:

{ "_id": "_design/example"
, "shows":
  { "one_field": ... } // Paste the above function as a string.
}

CouchDB вернет

HTTP 200 OK
Content-Type: text/plain
Content-Length: 26

I am the some_field value!
1 голос
/ 14 сентября 2011

Нет.CouchDB - это документно-ориентированная БД, поэтому она не поддерживает более детальный доступ к данным, помимо самого документа.

Он обеспечивает детальную индексацию, но не фактический доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...