3

次のようなcouchdbドキュメントがあるとします。

{
    "_id": "id",
    "_rev": "rev",
    "title": "foobar",
    "URI": "http://www.foobar.com",
    "notes": "",
    "date": 1334177254774,
    "tags": [
        "tag1",
        "tag2",
        "tag3"
    ],
    "date_modified": 1334177278457,
    "deleted": false
}

タグから転置インデックスを作成したいので、次のようになります。

{
    "tag1": [
        _id,
        _id,
        _id
    ],
    "tag2": [
        _id,
        _id,
        ...
    ]
}

私が読んで試したことから、couchdbは私にそれをさせないかもしれません。マップフェーズでは実行できず、カウチ削減フェーズでは実行できないようです。これは、アプリの別のレイヤーで実行する必要があることですか?

4

1 に答える 1

3

これは、CouchDBのマップ機能を使用して実現できます。

CouchDBは、ファットリストではなく、トールリストが好きです。したがって、この問題を「きめ細かく切り取る」には、ドキュメントIDごとに1行ずつ、タグにキーを設定したビューが必要です。

// View rows (conceptual diagram)
// Key  , Value
[ "tag1", "_id1"
, "tag1", "_id2"
, "tag1", "_id3"

, "tag2", "_id2"
, "tag2", "_id4"
, "tag3", "_id6"
]

タグ付きのすべてのドキュメントIDのリストを取得するには、タグ名をキーとしてビューを押しますGET /db/_design/ddoc/_view/tags?key="tag1"

これで十分です。ただし、lagniappeとして、使用されたすべてのタグの数を取得するように"reduce"値を設定でき"_count"ます(タグクラウドの構築に役立ちます)。&reduce=falseインデックスをクエリする場合は、忘れずに追加してください。

于 2012-04-23T14:00:06.193 に答える