首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Couchbase视图相当于Select count(doc.id) from doc where doc.productId in (select productId from doc where doc.lastupdated between x and y)

Couchbase视图相当于Select count(doc.id) from doc where doc.productId in (select productId from doc where doc.lastupdated between x and y)
EN

Stack Overflow用户
提问于 2016-04-26 08:20:54
回答 1查看 100关注 0票数 0

我正在尝试计算couchbase存储桶中与产品相关的“评论”数量。对于“完整”的数据集来说,这一部分很容易。这只是一个简单的map / reduce。当我想将其限制为仅在日期范围内发生更改的产品时,事情就变得棘手了。我可以在CB中以两个不同的视图来做这件事。一个获取产品Id,dateCreated在我的范围内,然后我将这些Id传递给另一个,它计算我的统计数据。然而,这种方法的性能很糟糕。第二个查询的键不一定是连续的,所以我不能对它们进行开始/结束操作;我使用的是版本4.x .net的CouchBase2.2客户机。

我对任何选项都持开放态度;例如,Super-a do-all- in -one-call View,或者,如果客户端有一些能力来批量获取view中的非连续键(我在这个主题上找不到任何东西),也可以遵循2视图方法。

以下是我的简化示例模式:

代码语言:javascript
复制
{
    "comment": {
        "key": "key1",
        "title": "yay",
        "productId": "product1",
        "dateCreated": "2016,11,30"
    },
    "comment": {
        "key": "key2",
        "title": "booo",
        "productId": "product1",
        "dateCreated": "2016,12,30"
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-04-29 05:43:49

不确定这是否是您想要的(也不确定如何将其转换为C#),但是假设您有两个文档,is分别为comment::1comment::2,并且每个文档都采用这种格式。

代码语言:javascript
复制
{
   "key": "key2",
   "title": "booo",
   "productId": "product1",
   "dateCreated": "2016,12,30"
}

您可以定义一个视图(让我们称之为comments_by_time)

地图

代码语言:javascript
复制
function (doc, meta) {
  if (doc.dateCreated) {
    var dateParts = doc.dateCreated.split(",");
    dateParts = dateParts.map(Number);
    emit(dateParts, doc.productId);
  }
}

Reduce

代码语言:javascript
复制
_count

然后,您可以使用View Query API对您的文档执行startKeyendKey范围。

终点

代码语言:javascript
复制
http://<couchbase>:8092/<bucket>/_design/<view>/_view/comments_by_time

获取所有评论的计数

代码语言:javascript
复制
?reduce=true
代码语言:javascript
复制
{"rows":[ {"key":null,"value":2} ] }

在日期之前获取文档

代码语言:javascript
复制
?reduce=false&endkey=[2016,12,1]
代码语言:javascript
复制
{"total_rows":2,"rows":[
{"id":"comment::1","key":[2016,11,30],"value":"product1"}
]
}

在日期之间

代码语言:javascript
复制
?reduce=false&startkey=[2016,12,1]&endkey=[2017,1,1]
代码语言:javascript
复制
{"total_rows":2,"rows":[
{"id":"comment::2","key":[2016,12,30],"value":"product1"}
]
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36853319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档