couchdb, получите последние 10 документов - PullRequest
5 голосов
/ 12 августа 2011

При использовании mysql это будет:

SELECT * FROM thetable ORDER BY id DESC LIMIT 10

Как я могу сделать это в couchdb для всех документов с "type": "message"?(не тянет все документы с типом: сообщение)

Спасибо

Ответы [ 2 ]

10 голосов
/ 12 августа 2011

Создание представления, которое генерирует все идентификаторы документов.Ключи просмотра будут использоваться для автоматической сортировки.

function(doc) {
    if(doc.type && doc.type === 'message'){
        emit(doc._id, null);
    }
}

Затем выполните запрос: http://host/yourdb/_design/yourdesigndoc/_view/viewname?limit=10&include_docs=true&descending=true

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

Обратите внимание, что есть также встроенное представление, которое делает то же самое: http://host/yourdb/_all_docs?limit=10&include_docs=true&descending=true

PS: Вы должны бытьПомните о том, что CouchDB по умолчанию использует UUID в качестве идентификаторов, что сделает сортировку более или менее бесполезной, если вы действительно хотите получить последние документы.Либо предоставьте свои собственные инкрементные идентификаторы (как насчет распределения / репликации?), Либо используйте новое поле, в котором хранится время создания документа и его использование в представлении.


Если в ваших документах естьПоле created (т. Е. Отметка времени UNIX, JavaScript Date.now () или даже строка, подобная RFC 3339), вы можете построить индекс по этим значениям.

Вот представление на основе времени:

function(doc) {
    if(doc.type && doc.type === 'message' && doc.created){
        emit(doc.created, null);
    }
}

Обратите внимание, что мы не будем выдавать сам doc._id.Однако CouchDB автоматически сохраняет doc._id, откуда поступили данные для каждой пары «ключ / значение», поэтому мы можем снова использовать include_docs=true для получения полных документов.

Запрос http://host/yourdb/_design/yourdesigndoc/_view/viewname?limit=10&include_docs=true&descending=true

3 голосов
/ 18 ноября 2014

Если идентификаторы ваших документов уже инкрементные, вместо стандартных UUID CouchDB вам даже не нужно определять представление, вы можете просто использовать стандартное _all_docs представление, например

http://couchdb_host/your_db/_all_docs?limit=10&descending=true&include_docs=true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...