3

couchdb views/map-reduceに質問があります。

たとえば、次のようなホテルドキュメントを含むデータベースがあります。

[{
        _id: "1",
        name: "Hotel A",
        type: "hotel",
        stars: 3,
        flags: ["family-friendly","green-hotel","sport"],
        hotelType: "premium",
        food: ["breakfast","lunch"]
    }, {
        _id: "2",
        name: "Hotel B",
        type: "hotel",
        stars: 5,
        flags: ["family-friendly","pet-friendly"],
        hotelType: "budget",
        food: ["breakfast","lunch","dinner"]
    }]

3つ星のホテルをすべて検索するには、次のビューが当てはまります。

function(doc) {
    emit([doc.stars, doc.name]);
}

startkey = [3]を使用すると、すべて問題ありません。

しかし、どのようにして複数のフィルターでビューを作成することができますか?

例-すべてのホテル:

  • 3つ星とフラグ「家族向け」と「ペット向け」とhotelType「予算」で?
  • hotelType「プレミアム」と食べ物「朝食」または「昼食」で?

何か案は?

編集:私は今、古き良きmysqlを使用することにしました。CouchDBは私にとって素晴らしい経験でしたが、1つのドキュメントのデータ以上のものが必要な場合は、非常に多くの問題があります:(

4

3 に答える 3

2

値のグループを持つキーを発行できます。

emit([[doc.stars,doc.hotelType], doc.name]);

問題は、属性が常に同じ順序で削減されるため、属性を重要度順に並べることができる場合にのみ機能することです。さまざまなビューを使用する Kxepal のソリューションは、おそらくあなたの状況に最適です。

ソース: http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views#Grouping

于 2012-10-17T15:20:34.500 に答える
1

そのために別のビューを使用する必要があります。各ビューは、独自のキーを使用して独自のドメインを処理します。値の異なる複数のエミットを介してすべてのデータに対して1つのビューを作成することもできますkeyが、観点から見ると、維持するのは困難です。

于 2012-10-17T15:12:37.690 に答える
0

CouchDB ビューは 1 次元です。そして、多次元クエリを探しています:

  • x = 星
  • y = フラグ
  • z = ホテルタイプ

残念ながら、多次元クエリはサポートされていません。たとえば、緯度と経度で地理的な場所を照会する必要がある場合は、GeoCouch を使用する必要があります。

于 2012-10-18T06:09:18.570 に答える