Tôi đang cố gắng sử dụng CouchDB cho ứng dụng mới và tôi cần tạo chế độ xem sắp xếp theo nhiều trường và cũng lọc theo nhiều trường. Dưới đây là một tài liệu ví dụ, tôi đã rời khỏi _id và _rev để lưu bản thân một số cách gõ.Sắp xếp và lọc CouchDB trong cùng một chế độ xem
{
"title": "My Document",
"date": 1279816057,
"ranking": 5,
"category": "fun",
"tags": [
"couchdb",
"technology"
],
}
Từ tài liệu, tôi đã biết rằng tôi có thể dễ dàng tạo chế độ xem sắp xếp theo trường như xếp hạng.
function(doc) {
emit(doc.ranking, doc);
}
Tôi cũng đã học được rằng tôi có thể dễ dàng lọc theo các lĩnh vực như loại
function(doc) {
emit(doc.category, doc);
}
http://127.0.0.1:5984/database/_design/filter/_view/filter?key=%22fun%22
Vấn đề của tôi là tôi cần phải làm một loạt những điều này tất cả cùng một lúc. Tôi muốn lọc dựa trên danh mục và cũng có thẻ. Tôi sẽ có thể lọc xuống chỉ các tài liệu có danh mục "vui nhộn" và thẻ "couchdb". Tôi muốn sắp xếp các kết quả được lọc theo xếp hạng theo thứ tự giảm dần, sau đó theo ngày theo thứ tự tăng dần, sau đó theo tiêu đề theo thứ tự bảng chữ cái.
Tôi làm cách nào để tạo một chế độ xem thực hiện tất cả sắp xếp và lọc đó được kết hợp?
Cảm ơn điều này thực sự hữu ích, nhưng tôi chỉ cần trợ giúp thêm một chút. Vì nó phát ra cùng một tài liệu nhiều lần, làm thế nào để tôi nhận được nó chỉ cho tôi mỗi tài liệu một lần? – Apreche
Bạn không thể, trừ khi bạn chia nhỏ từng nhóm này thành chế độ xem của riêng họ. Ví dụ,/_design/articles/_view/byRanking,/_design/articles/_view/byDate, vv Nếu bạn muốn giữ mọi thứ trong một khung nhìn này, thì bạn sẽ phải quản lý dữ liệu trong máy khách của bạn. Hoặc bạn có thể làm theo những gì tôi đã nói về chỉ trả về _id hoặc null của tài liệu làm giá trị, khi bạn có thể thực hiện cuộc gọi thứ hai để nhận tài liệu một lần. –
Ồ, đợi đã, đừng bận tâm. Tôi đã hiểu rồi. Tôi nghĩ rằng bạn hơi hiểu lầm những gì tôi muốn. Tôi muốn sắp xếp theo xếp hạng, ngày tháng và tiêu đề cùng một lúc. Trong SQL nó sẽ là "thứ tự bằng cách xếp hạng asc, ngày desc, tiêu đề asc" Tôi có thể làm điều này bằng cách làm chỉ một phát ra và sử dụng khóa khởi động và khóa để lọc và thứ tự sẽ được thực hiện. Cảm ơn! – Apreche