Выбрать главные/последние 10 в couchdb?

Как я выполнил бы запрос, эквивалентный для "выбора лучших 10" в дб дивана?

Например, у меня есть "схема" как так:

title   body   modified

и я хочу выбрать последние 10 измененных документов.

Как добавленная премия, если кто-либо может придумать способ сделать то же только на категорию. Таким образом для:

title   category   body   modified

возвратите список последних 10 документов в каждой категории.

Я просто задаюсь вопросом, возможен ли такой запрос в couchdb.

12
задан Andriy Drozdyuk 21 April 2010 в 18:31
поделиться

2 ответа

вот что вам нужно сделать.

Функция сопоставления

function(doc)
{
  if (doc.category)
  {
    emit(['category', doc.category], doc.modified);
  }
}

, тогда вам понадобится функция списка, которая группирует их, у вас может возникнуть соблазн злоупотребить сокращением и сделать это, но это, вероятно, вызовет ошибки из-за недостаточно быстрого сокращения с большими наборами данных.

function(head, req)
{
  % this sort function assumes that modifed is a number
  % and it sorts in descending order
  function sortCategory(a,b) { b.value - a.value; }
  var categories = {};
  var category;
  var id;
  var row;
  while (row = getRow())
  {
    if (!categories[row.key[0]])
    {
      categories[row.key[0]] = [];
    }
    categories[row.key[0]].push(row);
  }
  for (var cat in categories)
  {
    categories[cat].sort(sortCategory);
    categories[cat] = categories[cat].slice(0,10);
  }
  send(toJSON(categories));  
}

теперь вы можете получить все 10 лучших категорий с помощью

http://localhost:5984/database/_design/doc/_list/top_ten/by_categories

и получить документы с помощью

http://localhost:5984/database/_design/doc/_list/top_ten/by_categories?include_docs=true

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

curl -X POST http://localhost:5984/database/_design/doc/_list/top_ten/by_categories -d '{"keys":[["category1"],["category2",["category3"]]}'

вы также не можете жестко закодировать 10 и передать число через переменную req .

Вот еще несколько уловок View / List .

3
ответ дан 2 December 2019 в 22:22
поделиться

Чтобы получить первые 10 документов из базы данных, вы можете использовать параметр запроса ограничения. Например. позвонив по номеру

http://localhost:5984/yourdb/_design/design_doc/_view/view_name?limit=10

, вы получите первые 10 документов.

Просмотр строк сортируется по ключу; добавление убывающего = true в строку запроса изменит их порядок. Вы также можете генерировать только те документы, которые вам интересны, снова используя строку запроса для выбора интересующих вас ключей. Итак, в вашем представлении вы пишете свою функцию карты, например:

function(doc) {
    emit([doc.category, doc.modified], doc);
}

И вы запрашиваете ее следующим образом:

http://localhost:5984/yourdb/_design/design_doc/_view/view_name?startkey=["youcategory"]&endkey=["youcategory", date_in_the_future]&limit=10&descending=true
7
ответ дан 2 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: