Azure CosmosDB:按天获取上个月的文档

时间:2019-01-07 10:47:38

标签: azure-cosmosdb

我正在将Azure CosmosDB与SQL api结合使用,并且试图在前端创建一个图形,该图形表示一个月内每个特定日期上载的所有文档。该图最多应为一个月。在下面,我附上了一个模拟我的想法的屏幕截图。在评论中进行一些讨论之后,我还将添加数据模式。

Each day would pretty much show the COUNT(message) of the logs that day

数据消息示例(分区键为 / message / deviceId

{
    "message": {
        "deviceId": "device01",
        "timestamp": "2018-07-25T08:47:16,094",
        "payload": "6c,65,33",
    },
    "id": "ff670801-de08-422c-be0a-fa67e6324bb8",
    "_rid": "75klAPTTTHADAAAAAAAAAA==",
    "_self": "dbs/75klAA==/colls/75klAPTTTHA=/docs/75klAPTTTHADAAAAAAAAAA==/",
    "_etag": "\"0000bc1d-0000-0000-0000-5c112e5a0000\"",
    "_attachments": "attachments/",
    "_ts": 1544629850
}

现在我的问题是:获取此类数据的最佳方法是什么?我通常会选择更简单,更快速的函数,但是我认为这种方法实际上是行不通的,因为我需要获取上个月所有的数据,以获取上载次数。这样做也会花费很多时间和金钱。

是否存在另一种收集此类数据的方法?你们会推荐另一种方法吗?如果是这样的话?我不想添加任何其他服务,因为我已经在从事一个相对较大的项目,并且已经熟悉所有这些服务。

编辑:创建某种文档来保留有关当月的所有信息(如天数组)会不是一个好主意?因此查询将只在不在数组内部的日期运行。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我来自CosmosDB工程团队。根据您的问题,我了解您需要上个月每天更新的文档计数。

您可以通过两种方式执行此操作:

  1. 使用_ts过滤器发出COUNT()查询以获取您感兴趣的日期。目前这不是最理想的方法-我们正在更加有效地提供聚合服务,并提供GROUP BY支持,但我们不这样做这些功能还没有一个固定的日期。如果文档数量足够少并且您的收藏集没有繁重的工作量,那么您仍然可以选择使用此选项。
  2. 您可以从源集合中设置变更Feed管道,捕获所有更改,并使用该Feed中的更改来更新一个单独的元数据文档,该文档指示每天的更新次数。以下是使用变更供稿处理器的链接:https://docs.microsoft.com/en-us/azure/cosmos-db/change-feed