3

私は CouchDB の知識に少しつまずいています。

タグの配列でタグ付けされ、作成日を持つコンテンツのデータベースがあります。

特定のタグでタグ付けされた限られた数の最新の記事を取得するビューを作成したいと考えています。

たとえば、「ビジネス」というタグが付けられた最新の 6 つの記事。

this questionに出くわしました。これにより、必要な場所にほぼ到達したようですが、重要な要素が1つ欠けています。これは、クエリ文字列を作成して、あるキーでソートし、別のキーで検索する方法だと思います。

これが私のマップ機能です。

function(doc) {
    if (doc.published == "yes" && doc.type == "news") {
        for (var i = 0; i < doc.tags.length; i++) {
            if (doc.tags[i]) {
                emit([doc.created, doc.tags[i]], doc);
            }
        }
    }
}

では、created に基づく最新のドキュメントである "Business" というタグが付けられたすべてのドキュメントに対して、そのビューをクエリするにはどうすればよいでしょうか。

created 属性は日付でソート可能な形式です。

4

2 に答える 2

2

まず、エミットの順序を切り替えます。

emit([doc.tags[i], doc.created]);

(同様に省略しdocます。追加するだけでinclude_docs=trueドキュメント全体を取得でき、その過程でビューがそれほど多くのディスク容量を占有することはありません)

"Business"これで、次のクエリ文字列を使用して、タグ付けされたすべてのストーリーをクエリできます。

startkey=["Business"]&endkey=["Business",{}]

ビジネス タグが付いたすべてのドキュメントが取得され、日付順に並べ替えられます。

これは、基本的にインデックスのソート/クエリ方法を管理するルールであるビュー照合を利用します。このような複雑なキーの場合、並べ替えは配列の各項目に対して個別に行われます。(つまり、最初のキーが最初にソートされ、2 番目のキーが 2 番目にソートされるなど) ビュー インデックスをクエリするときは常に左から右に移動する必要があるため、順序が重要になります。

最新の 6 つが必要な場合は、クエリ文字列を変更する必要があります。

descending=true&limit=6&endkey=["Business"]&startkey=["Business",{}]

通知パラメータがどのように機能するかにより、 startkey/のendkey値を入れ替える必要があります。descending詳細な説明については、wiki の View リファレンス ページを参照してください

于 2012-12-12T15:33:59.683 に答える
0

OK、私はこれを理解したと思いますが、それを完全に理解しているかどうかは確信が持てません.

複雑なキーと検索と並べ替えに関するこの記事を見つけました。

私のマップ関数は次のようになります。

function(doc) {
    if (doc.published == "yes" && doc.type == "news") {
        for (var i = 0; i < doc.tags.length; i++) {
            if (doc.tags[i]) {
                emit([doc.tags[i], doc.created], doc);
            }
        }
    }
}

そして、それを使用してクエリとソートを行うと、クエリは次のようになります。

http://localhost:5984/database/_design/story/_view/tagged?limit=10&startkey=["ビジネス"]&endkey=["ビジネス",{}]&descending=false

望む結果が得られていますが、すべてを理解しているかどうかは完全にはわかりません。

于 2012-12-12T15:53:42.513 に答える