【问题标题】:Query/Filter CosmosDB Core SQL by key name value按键名值查询/过滤 CosmosDB Core SQL
【发布时间】:2021-04-07 07:55:16
【问题描述】:

我有以下数据结构(能够按天查询和过滤):

"id": "someId",
"dailyPlan": {
    "2020-04-07": {
        "activityCategoryOne": {
            "activityOne": "someID",
            "activityTwo": "someIDTwo"
        }
    }
}

所以现在我只想查询过去和接下来两周的项目。但我不知道如何查询键名(“2020-04-07”)。 这可能吗?如果可以,您能否给我一个提示或文档链接,因为我在研究中找不到任何相关信息。

非常感谢!

最好, Tixamaster

【问题讨论】:

  • 使用 udf 创建自定义函数或将您的密钥设为“date”:“2020-04-07”之类的值。我也没有找到任何文档来实现您的目标:(
  • 键应该是固定路径,而不是可查询的变量。如评论所述,最好重构为 date 属性,并将日期作为值。
  • 同意其他cmets。将实际内容存储为 key 而不是 value 是一种反模式。一旦您将日期移动为某个属性的值,那么您将触手可及的 SQL API 的全部查询功能。在设计这样的模式时,除了蛮力之外真的没有其他解决方案。我回答了另一个问题here,其中部分问题也正是如此(您可以查看我在回答中包含的重构,您可以在其中采取类似的方法)。

标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

正如 cmets 所说,通过 Cosmos DB 中的 SQL 是不可能实现的。

最好的解决方法是像这样更改您的架构:

"id": "someId",
"dailyPlan": {
    "date": "2020-04-07",
    "activityCategoryOne": {
        "activityOne": "someID",
         "activityTwo": "someIDTwo" 
    }
}

然后像这样使用 SQL:

SELECT * FROM c WHERE c.dailyPlan.date BETWEEN xxx AND xxx

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 2020-03-08
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 2013-10-27
    • 1970-01-01
    • 2013-06-07
    相关资源
    最近更新 更多