2

假设我有以下文件

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。

4

1 回答 1

2

在为具有多个查询字段的范围查询设计视图时,固定查询字段(companyId)应该是复合索引的前缀,范围查询字段应该在末尾。在当前视图下,Couchbase 将发出salesDate范围内的每个文档,而不考虑companyId.

颠倒键的顺序将起作用:

function(doc, meta) { 
  emit([doc.companyId, doc.salesDate], doc); 
}

询问:

?startkey=["1", 1425254400000]&endkey=["1", 1425340800000]

注意如果salesDate是字符串而不是数值,Couchbase 将使用字典顺序来执行范围查询。

于 2015-06-16T04:57:57.160 回答