0

次の従業員ドキュメント構造を検討してください

{ 
   "_id":...,
   "rev":...,
   "type":"Employee",
   "fName":...,
   "lName":...,
   "designation":...,
   "department":...,
   "reportingTo":...,
   "isActive":..,
   more attributes
   more attributes
}

そして、「Employee」という名前のビューで次のマップ関数を使用します

function(doc) {
  if (doc.type=="Employee") {
    emit({
            "EID":doc._id,
            "FirstName":doc.fName,
            "LastName":doc.lName,
            "Designation":doc.designation,
            "Department":doc.department,
            "ReportingTo":doc.reportingTo,
            "Active":doc.isActive
         },
        null
        );
  }
};

発行された属性の任意の組み合わせと順序に基づいてこのビューをクエリしたい (クエリには、ダックタイピングのようなランダムな属性がほとんど含まれない場合があります)。出来ますか?もしよろしければ、サンプルやリンクを教えてください。

ありがとう

4

1 に答える 1

0

同じ問題に数回遭遇しました。できますが、それぞれを単独でインデックス化する必要があります (行ったようにすべてを 1 つのハッシュにする必要はありません)。しかし、emit の値で全体を処理できます。かなり非効率的ですが、仕事は完了します。(このリンクを参照してください:スニペットの表示)

すなわち:

function(doc) {
    if (doc.type=="Employee") {
        emit(["EID",doc.values.EID], doc.values);
        emit(["FirstName", doc.fName], doc.values);
        emit(["LastName", doc.lName], doc.values);
        emit(["Designation", doc.designation], doc.values);
        emit(["Department", doc.department], doc.values);
        emit(["ReportingTo", doc.reportingTo], doc.values);
        emit(["Active", doc.isActive], doc.values);
    }
}

これにより、すべての「EID」がツリーなどの同じ部分に配置されます。それがあなたにとって良いか悪いかはわかりません。

[field name:]value 検索で多くの機能が必要になった場合は、おそらく Lucene-CouchDB セットアップに移行する価値があります。いくつか存在しますが、少し未熟です。

于 2013-04-07T22:54:12.273 に答える