Я пытаюсь использовать CouchDB для нового приложения, и мне нужно создать представление, которое сортирует по нескольким полям, а также фильтрует по нескольким полям. Вот пример документа, я забыл _id и _rev, чтобы сэкономить себя на печатании.CouchDB сортировка и фильтрация в том же представлении
{
"title": "My Document",
"date": 1279816057,
"ranking": 5,
"category": "fun",
"tags": [
"couchdb",
"technology"
],
}
Из документации я узнал, что могу легко создать представление, которое сортируется по полю, например, по ранжированию.
function(doc) {
emit(doc.ranking, doc);
}
Я также узнал, что я могу легко фильтровать по таким полям, как категории
function(doc) {
emit(doc.category, doc);
}
http://127.0.0.1:5984/database/_design/filter/_view/filter?key=%22fun%22
Моя проблема заключается в том, что мне нужно сделать кучу этих вещей в одно и тоже время. Я хочу фильтровать на основе категории, а также тега. Я должен иметь возможность фильтровать только документы с категорией «fun» и тегом «couchdb». Я хочу отсортировать результаты фильтрации по ранжированию в порядке убывания, затем по дате в порядке возрастания, затем по названию в алфавитном порядке.
Как создать один вид, который объединяет все эти сортировки и фильтрации?
Спасибо, что это действительно полезно, но мне просто нужно немного помочь. Так как он издает одни и те же документы снова и снова, как мне заставить его просто дать мне каждый документ один раз? – Apreche
Вы не можете, если только вы не разбиваете каждую из этих групп на свое собственное видение. Например,/_design/articles/_view/byRanking,/_design/articles/_view/byDate и т. Д. Если вы хотите сохранить все в этом одном представлении, вам придется управлять данными в вашем клиенте. Или вы могли бы следить за тем, что я говорил только о возврате _id или null в качестве значения, так как вы могли бы сделать второй звонок, чтобы получить документ один раз. –
Ой, подождите, неважно. Я понял. Я думаю, вы слегка неправильно поняли то, что я хотел. Я хочу сортировать по ранжированию, дате и названию одновременно. В SQL это будет «порядок по ранжированию asc, date desc, title asc». Я могу сделать это, выполнив только один emit и использую ключ запуска и конечный ключ для фильтрации, и заказ уже будет выполнен. Благодаря! – Apreche