N1QL/Couchbase - 显示每天产生的所有事件,其中不知道有多少天可能在 table
N1QL/Couchbase - Show all the events produced each day, where don't know how many different days maybe in the table
假设我有一个包含如下文档的存储桶:
[
{"topic":..., "event":..., "message":...,"date":......}
.
.
.
]
如何编写一个查询,将每天特定事件类型的所有消息分组,而不对日期进行硬编码,并且假设我们不知道存储桶中有多少个不同的日期?
我正在考虑先获取不同的日期。 (例如,SELECT DISTINCT(date) FROM bucket
)。
有没有办法循环遍历这几天,将所有相同日期的事件放到一个数组中,然后将所有数组联合在一起作为一个嵌套数组?
使用聚合查询。
SELECT b.date, ARRAY_AGG(b) AS docs
FROM mybucket AS b
WHERE b.event = "myevent"
GROUP BY b.date ;
如果日期是 ISO-8601 格式,请使用 https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/datefun.html 按所需格式分组的日期函数。
SELECT DATE_FORMAT_STR(b.date,"1111-11-11") AS day, ARRAY_AGG(b) AS docs
FROM mybucket AS b
WHERE b.event = "myevent"
GROUP BY DATE_FORMAT_STR(b.date,"1111-11-11") ;
假设我有一个包含如下文档的存储桶:
[
{"topic":..., "event":..., "message":...,"date":......}
.
.
.
]
如何编写一个查询,将每天特定事件类型的所有消息分组,而不对日期进行硬编码,并且假设我们不知道存储桶中有多少个不同的日期?
我正在考虑先获取不同的日期。 (例如,SELECT DISTINCT(date) FROM bucket
)。
有没有办法循环遍历这几天,将所有相同日期的事件放到一个数组中,然后将所有数组联合在一起作为一个嵌套数组?
使用聚合查询。
SELECT b.date, ARRAY_AGG(b) AS docs
FROM mybucket AS b
WHERE b.event = "myevent"
GROUP BY b.date ;
如果日期是 ISO-8601 格式,请使用 https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/datefun.html 按所需格式分组的日期函数。
SELECT DATE_FORMAT_STR(b.date,"1111-11-11") AS day, ARRAY_AGG(b) AS docs
FROM mybucket AS b
WHERE b.event = "myevent"
GROUP BY DATE_FORMAT_STR(b.date,"1111-11-11") ;