【问题标题】:couchbase view query group by parts of keycouchbase 按部分键查看查询组
【发布时间】:2018-12-04 12:17:03
【问题描述】:

我有一些包含消息的数据,包括:

mac
version
source
timestamp

我想知道上周有多少设备在使用哪个版本。例如,

version 1.0: 20
version 2.1: 45
version 3.4: 3198

所以说我的观点如下:

map: function (doc, meta) {
  emit([doc.timestamp, doc.source, doc.mac, doc.version], 1);
}

如何按 mac 和版本分组?

我可以使用时间戳来控制我正在查看的消息范围。但问题是我只关心设备的数量,而不是消息的数量。包含时间戳的 group by 包括来自设备的每条消息,但我只关心设备的数量及其版本,而不是消息的数量。

【问题讨论】:

  • 您使用的是什么版本的 Couchbase? N1QL 是不可能的(为什么)?
  • 我使用的是 Enterprise Edition 5.1.0 build 5552。我对数据库一般来说是新手。 couchbase 的优势不在于视图和提前索引数据的性能吗? N1QL 对我来说非常慢
  • N1QL 查询使用什么索引?

标签: javascript database view couchbase


【解决方案1】:

我远非 M/R 专家,但这样可行吗:

function (doc, meta) {
  emit([doc.version, doc.timestamp, doc.source, doc.mac], 1);
}

对于启动键:["0","2018-05-06"] 结束键:["Z","2018-05-13"]

这意味着,每个文档的版本都在 0 和 Z 之间(应该是所有内容),每个文档的时间戳都在两个给定日期之间。

对于group_level:1(按版本分组)

对于reduce,使用内置的_count

我用 4 个文档(1.0 版中的 2 个和 2.1 版中的 2 个)对此进行了测试,它似乎有效:

【讨论】:

  • 这听起来很像我正在寻找的,基本上是一种为密钥的一部分设置通配符的方法。不幸的是,这不起作用。因为键范围是有序的,所以您提供的开始键和结束键将选择所有内容,并且时间戳不会产生按日期过滤的效果
猜你喜欢
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-07
相关资源
最近更新 更多