CouchDB视图 - 将密钥作为JSON和&发出。基于任何属性过滤

时间:2013-04-05 13:15:39

标签: couchdb

考虑遵循员工文档结构

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

在名为“员工”的视图中跟随地图功能

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
        );
  }
};

我想基于任何组合查询此视图&发出的属性的顺序(查询可能包括很少的随机属性可能像鸭子打字)。可能吗?如果愿意,请告诉我一些样品或链接。

由于

1 个答案:

答案 0 :(得分:0)

我遇到过几次同样的问题;你可以,但你必须自己索引(不是像你一样在一个哈希中)。但你可以通过发射值的整个事情。它可能效率很低,但可以完成工作。 (见此链接:View Snippets

即:

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:]值搜索中开始需要很多功能,那么它可能值得转向Lucene-CouchDB设置。有几个存在,但有点不成熟。