Couchdb 如何使用startkey和endkey在cloudant中查询视图,其中key包含两个元素?

Couchdb 如何使用startkey和endkey在cloudant中查询视图,其中key包含两个元素?,couchdb,cloudant,nosql,Couchdb,Cloudant,Nosql,我需要根据期间筛选一些记录,例如,让我计算201704和201705之间的所有产品计数 因此,我的emit类似于: emit([doc.productId, doc.period],1) startkey=["201604"]&endkey=[{},"201605"] 并且使用的reduce是\u count。但当我尝试在startkey和endkey上过滤时,它会给我所有的记录。我正在尝试类似于: emit([doc.productId, doc.period],1) sta

我需要根据期间筛选一些记录,例如,让我计算201704和201705之间的所有产品计数

因此,我的emit类似于:

emit([doc.productId, doc.period],1) 
startkey=["201604"]&endkey=[{},"201605"]
并且使用的reduce是
\u count
。但当我尝试在startkey和endkey上过滤时,它会给我所有的记录。我正在尝试类似于:

emit([doc.productId, doc.period],1) 
startkey=["201604"]&endkey=[{},"201605"]
其中,我的密钥结构类似于密钥:

[
"aws-60826348802",
201703
]

我不想颠倒键中元素的顺序,因为我想通过定义
组\u level=1
对ID进行计数。谁能帮我一下吗。我还没有得到任何解决方案。

为了能够选择(使用startkey/endkey),您的索引需要按该顺序排列。假设您的文档如下所示:

{
  "_id": "someid",
  "product": "aws-60826348802",
  "date": "201604",
  "price": 42.42
}
您可以创建映射函数,以按日期顺序索引文档,如下所示:

function(doc) {
  emit([doc.date, doc.product], doc.price);
}
现在您有了一个二维键(日期和产品代码),发出的值就是价格

这允许您按日期选择项目:

?startkey=["201604"]  // find items where the date is >= 201604
?startkey=["201604"]&endkey=["201605"]  // find items in April 2016
如果您选择一个缩减器(_count、_sum或_stats),您还可以执行聚合:

?startkey=["201601"]&endkey=["201701"]&group_level=1 // find items in 2016, group by month
?startkey=["201601"]&endkey=["201701"]&group_level=2 // find items in 2016, grouped by month and product code

例如,这可以得到每月的产品销售总额。

@Glynn感谢您的回复,但我想得到的是两个月范围内的产品总数,为此,我必须将productid作为第一个关键字,将period作为第二个关键字。如果我反转keys元素,它将给出特定月份的productID计数。希望我能解释我的问题。。