如何在couchbase中为此sql语句编写视图

时间:2015-06-15 17:07:46

标签: couchbase couchbase-view

假设我有以下文件

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。

1 个答案:

答案 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将使用词典排序来执行范围查询。