假设我有以下文件
Document 1
{
companyId: "1",
salesDate: "1425254400000" //this is UTC time as a long
}
Document 2
{
companyId: "1",
salesDate: "1425340800000" //this is UTC time as a long
}
Document 3
{
companyId: "2",
salesDate: "1425254400000" //this is UTC time as a long
}
我目前将我的观点设置为
function(doc, meta) { emit([doc.salesDate, doc.companyId], doc); }
使用
时会撤回所有3个文件?startkey=[1425254400000,"1"]&endkey=[1425340800000,"1"]
我不确定如何让它只按公司ID撤回该日期范围的销售。
sql版本将是SELECT * FROM sales WHERE companyId =:companyId AND salesDate BETWEEN:rangeStart AND:rangeEnd
编辑:我正在使用其余的API。
答案 0 :(得分:2)
在为具有多个查询字段的范围查询设计视图时,固定查询字段(companyId
)应该是复合索引的前缀,范围查询字段应该在末尾。使用当前视图,Couchbase将发出salesDate
在范围内的所有文档,而不考虑companyId
。
反转键的顺序将起作用:
function(doc, meta) {
emit([doc.companyId, doc.salesDate], doc);
}
查询:
?startkey=["1", 1425254400000]&endkey=["1", 1425340800000]
N.B。如果salesDate
是字符串而不是数字值,Couchbase将使用词典排序来执行范围查询。