CouchDB просматривать документы с тегом = foo или tag = bar - PullRequest
1 голос
/ 11 ноября 2011

Учитывая мои следующие документы:

{
   _id: ###,
   type: "blogpost",
   title: "First blog post",
   tag: "tutorial"
}

{
   _id: ###,
   type: "blogpost",
   title: "Second blog post",
   tag: "report"
}

{
   _id: ###,
   type: "blogpost",
   title: "Third blog post",
   tag: "tutorial"
}

{
   _id: ###,
   type: "blogpost",
   title: "Fourth blog post",
   tag: "article"
}

Теперь я хотел бы сделать следующее: найти все посты блога, тег которых является статьей или отчетом.

Я уже прочитал в документации, что я могу выполнить POST для представления или списка, что позволяет искать несколько ключей. Но это всегда будет нуждаться в CURL или что-то правильно?

Ответы [ 2 ]

1 голос
/ 13 ноября 2011

Если вам нужно указать статью, сообщить как переменную в своем HTTP-вызове, тогда все, что вам нужно, это просмотр и список

Просмотр: test_view

function(doc) {
  if (doc.tag) {
    emit(doc.tag, doc);
  }
};

Список: test_list

function(head, req) {
  start({
    "headers": {
      "Content-Type": "text/html"
    }
  });
  var row;
  var tags = req.query.tags;
  var tagArray = tags.split(',');
  while(row = getRow()) {
    if (tagArray.indexOf(row.key) != -1) {
      send(row.value.tag + ' : ' + row.value.title + '<br>');
    }
  }
}

Теперь вы можете получить список / HTML с http://yourserver.com:5985/db/_design/test/_list/test_list/test_view?tags=article,report

0 голосов
/ 11 ноября 2011

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

Посетите Futon на http://yourserver.com:5984/_utils, и создайте представление в своей базе данных. Вам понадобится только функция карты, чтобы выполнить то, что вы просите:

function(doc) {
    if (doc.tag && (doc.tag == "article" || doc.tag == "report")) {
        emit(doc.tag, doc);
    }
}

Если вы сохраните свое представление и назовете его Articles_or_reports, вы можете получить данные из своего представления с помощью этого запроса:

http://yourserver.com:5984/db/_design/test/_view/articles_or_reports

Который вернется

{"total_rows":2,"offset":0,"rows":[
{"id":"168ba21f7209994b69336dd8c30041f3","key":"article","value":{"_id":"168ba21f7209994b69336dd8c30041f3","_rev":"1-f033b30522d09c33cbd68332b89c95a7","type":"blogpost","title":"Fourth blog post","tag":"article"}},
{"id":"168ba21f7209994b69336dd8c3003139","key":"report","value":{"_id":"168ba21f7209994b69336dd8c3003139","_rev":"1-f7a473afc253972f7cfec62a335dcb23","type":"blogpost","title":"Second blog post","tag":"report"}}
]}

Но для этого всегда понадобится cURL или что-то в этом роде?

Это зависит от вашего приложения, но единственный интерфейс к CouchDB - через HTTP. Есть библиотеки для многих языков, чтобы вывести ваше взаимодействие на более высокий уровень.

...