Couchdb - 日期范围+多个查询参数

Couchdb - date range + multiple query parameters

我希望能够在日期之间查询 couchdb,我知道这可以用 startkeyendkey 来完成(它工作正常),但是是否可以进行查询像这样:

SELECT *
FROM TABLENAME 
WHERE 
DateTime >= '2011-04-12T00:00:00.000' AND 
DateTime <= '2012-05-25T03:53:04.000'
AND 
  Status = 'Completed'
AND
Job_category = 'Installation'

Generally-speaking,随着字段数量的增加,在多个字段上建立索引变得越来越复杂。

我的主要问题是:StatusJob_category也需要动态查询吗?如果不是,你的看法很简单:

function (doc) {
  if (doc.Status === 'Completed' && doc.Job_category === 'Installation') {
    emit(doc.DateTime); // this line may change depending on how you break up and emit the datetimes
  }
}

视图 相当 便宜,(取决于您的数据库的大小)所以不要害怕建立多个涵盖不同情况的视图。我希望像 Status 这样的东西有可用选项的预定义列表,与 Job_category 相反,它看起来 可能 与用户输入更相关。

如果您需要这些字段是动态的,您也可以将它们添加到索引中:

function (doc) {
  emit([ doc.Status, doc.Job_category, doc.DateTime ]);
}

然后你可以使用一个数组作为你的start_key。例如:

start_key=["Completed", "Installation", ...]

tl;dr:使用 "static" 视图,其中您有给定字段的预定值列表。虽然可以查询 "dynamic" 具有多个字段的视图,但复杂性会增加得非常快。