我正在尝试展平和过滤 CosmosDB 中的 json 数据。数据如下所示,我想展平数组变量中的所有内容,然后按数组内的特定 _id 和时间戳进行过滤:
{
"_id": 21032,
"FirstConnected": {
"$date": 1522835868346
},
"LastUpdated": {
"$date": 1523360279908
},
"Variables": [
{
"_id": 99999,
"Values": [
{
"Timestamp": {
"$date": 1522835868347
},
"Value": 1
}
]
},
{
"_id": 99998,
"Values": [
{
"Timestamp": {
"$date": 1523270312001
},
"Value": 8888
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
如果您想使用根对象的属性来展平变量数组中的数据,您可以像这样查询您的集合:
SELECT root._id, root.FirstConnected, root.LastUpdated, var.Values
FROM root
JOIN var IN root.Variables
WHERE var._id = 99998
Run Code Online (Sandbox Code Playgroud)
这将导致:
[
{
"_id": 21032,
"FirstConnected": {
"$date": 1522835868346
},
"LastUpdated": {
"$date": 1523360279908
},
"Values": [
{
"Timestamp": {
"$date": 1523270312001
},
"Value": 8888
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
如果您想展平 Values 数组,您将需要编写如下内容:
SELECT root._id, root.FirstConnected, root.LastUpdated,
var.Values[0].Timestamp, var.Values[0]["Value"]
FROM root
JOIN var IN root.Variables
WHERE var._id = 99998
Run Code Online (Sandbox Code Playgroud)
请注意,CosmosDB 将“Value”视为保留关键字,您需要使用 escpape 语法。该查询的结果是:
[
{
"_id": 21032,
"FirstConnected": {
"$date": 1522835868346
},
"LastUpdated": {
"$date": 1523360279908
},
"Timestamp": "1970-01-01T00:00:00Z",
"Value": 8888
}
]
Run Code Online (Sandbox Code Playgroud)
检查更多详细信息https://learn.microsoft.com/en-us/azure/cosmos-db/sql-api-sql-query#Advanced
| 归档时间: |
|
| 查看次数: |
7538 次 |
| 最近记录: |