我希望能够在日期之间查询couchdb,我知道这可以通过startkey
和endkey
完成(它工作正常),但是可以像这样进行查询:
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'
答案 0 :(得分:2)
一般而言,随着字段数量的增加,在多个字段上建立索引会变得复杂。
我的主要问题是:是否需要动态查询Status
和Job_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:使用“静态”视图,其中您具有给定字段的预定值列表。虽然可以使用多个字段查询“动态”视图,但复杂性增长得非常快。