azure - Cosmos DB 中的动态属性
问题描述
我经历了很多关于 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
throughKey4
和更复杂的Key5
. 具体来说:
"Key5": {
"a500": "2021-09-03T09:32:55",
"a39": "2021-09-03T09:32:55"
}
您已将元数据嵌入到属性名称中,这是尝试索引或搜索时的问题。
为避免这种情况,请重构您的数据模型以具有一致的属性名称。像这样的东西,你有明确定义的键值对。然后,您可以在一个数组中拥有多个值。像这样的东西:
{
"Key5": [
{ "property_key": "a500", "property_value": "2021-09-03T09:32:55" },
{ "property_key": "a39", "property_value" : "2021-09-03T09:32:55" }
]
}
此时,您现在可以查询一组一致的属性名称。
您需要根据自己的需要进行定制,但这显示了如何避免在属性名称中存储真实数据的问题。
推荐阅读
- json - 多态类型的 aeson ToJSON 实例
- google-bigquery - BigQuery 从关键主从构造层次结构数组
- sql - 如何在 PRINT 语句中添加 ORDER BY?
- generative-adversarial-network - 简单 GAN 和 DCGAN 的区别
- reactjs - initialValues 不适用于 react-draft-wysiwyg 字段(redux-form)
- python - 如何修复 Flask RESTful api 服务器端点失败问题?
- c - 在C中调用函数时\是什么意思?
- android - 如何为 Android 中的许多类创建通用 ViewModelModule?
- ios - 自定义 NSCoding 对象,Swift(地图)
- mysql - 计算相似的 SQL 行