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

时间:2016-01-15 14:10:27

标签: couchdb

我希望能够在日期之间查询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'

1 个答案:

答案 0 :(得分:2)

一般而言,随着字段数量的增加,在多个字段上建立索引会变得复杂。

我的主要问题是:是否需要动态查询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:使用“静态”视图,其中您具有给定字段的预定值列表。虽然可以使用多个字段查询“动态”视图,但复杂性增长得非常快。