【发布时间】:2021-12-21 05:45:51
【问题描述】:
我浏览了很多关于 SO 的帖子。找不到我需要的东西。
我有一个收藏文档,如下所示
[
{
"Key1": "Value",
"Key2": 1,
"Key3": "Value",
"Key4": 5,
"Date": "2021-10-25T04:20:00",
"Key5": {
"a3": "2021-09-03T09:32:55",
"a199": "2021-09-03T09:32:55"
}
},
{
"Key1": "Value",
"Key2": 1,
"Key3": "Value",
"Key4": 5,
"Date": "2021-10-25T04:20:00",
"Key5": {
"a500": "2021-09-03T09:32:55",
"a39": "2021-09-03T09:32:55"
}
}
]
我正在使用这个查询
Select top 10 * from Collection c where c.Key5.a3 = '2021-09-03T09:32:55'
现在我需要过滤这个集合中的数据,其中 Key5.a3 或 Key5.a199 等于某个值。这里的问题是我不知道 Key5 下会出现哪些属性,这些是系统从 UI 随机创建的,每个文档在 Key5 中都有不同的属性。
我需要为这个集合构建一个查询,它不会关心 Key5.a199/399/500 或任何东西,而只是比较与之关联的值。
【问题讨论】:
-
我不太明白
Key1到Key4的用法 - 好像您正在以某种方式配对属性?也就是说:你不能有变量属性名称。您已经为此创建了需求,因为您使用了实际数据作为属性名称。尝试将Key5更改为具有key和value属性的子文档数组,其中key是a500和value是日期等。然后你总是查询相同的名称.请参阅this answer 我不久前发布了类似的问题,显示了类似的内容。 -
@DavidMakogon 你是正确的 Devid。现在我们已经完成了一半。我不认为我们将能够改变文档的结构,因为它会有很多变化。请忽略 Key1 到 Key4。在 Key5 上,我们有一项服务,它在其他文档中创建一个条目并在此处添加参考。该密钥是自动生成的,并且将针对每个条目进行更改。我希望我能澄清你的疑问。
-
@DavidMakogon 您能否将您的评论添加为答案,以便我将其标记为已接受的答案
-
您从哪里执行查询?是来自门户还是通过一些编码的应用程序。如果是,那么是什么语言?不能通过 1 个 sql 查询,但可以通过代码实现。
-
@AnupamChand - 这需要对每个文档进行完整解析以找到所需的数据,因为真实数据存储为属性名称。这是不平凡的,而且可能很昂贵。并且将实际数据存储为属性名称是一种反模式(因为没有直接的方法来查询此类数据)。从门户与代码查询并不重要。无论在何处执行此类查询,问题都存在。
标签: azure azure-cosmosdb azure-cosmosdb-sqlapi