我可以在Azure Cosmos DB的复合索引中为数组编制索引吗?
我在Azure Cosmos DB中索引数组时遇到问题 我正在尝试通过门户保存此索引策略我可以在Azure Cosmos DB的复合索引中为数组编制索引吗?,azure,azure-cosmosdb,Azure,Azure Cosmosdb,我在Azure Cosmos DB中索引数组时遇到问题 我正在尝试通过门户保存此索引策略 { "indexingMode": "consistent", "automatic": true, "includedPaths": [ { "path": "/*" } ], "e
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/\"_etag\"/?"
}
],
"compositeIndexes": [
[
{
"path": "/DeviceId",
"order": "ascending"
},
{
"path": "/TimeStamp",
"order": "ascending"
},
{
"path": "/Items/[]/Name/?",
"order": "ascending"
},
{
"path": "/Items/[]/DoubleValue/?",
"order": "ascending"
}
]
]
}
我收到错误“未能更新容器设备事件:
消息:{“代码”:“BADDREQUEST”,“消息”:“消息:{”错误:[“无法接受索引路径“\/Items\/[]\/Name\/?”,在位置“8”附近失败。”
这似乎是给出错误的数组[]语法
另一方面,我不确定我所做的一切是否有意义,但我有一个类似这样的问题
SELECT SUM(de0["DoubleValue"])
FROM root JOIN de0 IN root["Items"]
WHERE root["ApplicationId"] = 57 AND root["DeviceId"] = 126 AND root["TimeStamp"] >= "2021-02-21T17:55:29.7389397Z" AND de0["Name"] = "Use Case"
{
"id": "59ab9323-26ca-436f-8d29-e1ddd826f025",
"DeviceId": 3,
"ApplicationId": 3,
"RawData": "640F7A000A00E30142000000",
"TimeStamp": "2021-02-20T18:36:52.833174Z",
"Items": [
{
"Name": "Battery Status",
"StringValue": "Full",
"DoubleValue": null
},
{
"Name": "Use Case",
"StringValue": null,
"DoubleValue": 12
},
{
"Name": "Battery Voltage",
"StringValue": null,
"DoubleValue": 3.962
},
{
"Name": "Rain Gauge Count",
"StringValue": null,
"DoubleValue": 10
}
],
"_rid": "CgdVAO7B0DNkAAAAAAAAAA==",
"_self": "dbs/CgdVAA==/colls/CgdVAO7B0DM=/docs/CgdVAO7B0DNkAAAAAAAAAA==/",
"_etag": "\"61008771-0000-0d00-0000-603156c50000\"",
"_attachments": "attachments/",
"_ts": 1613846213
}
其中ApplicationId是分区键,保存的项如下所示
SELECT SUM(de0["DoubleValue"])
FROM root JOIN de0 IN root["Items"]
WHERE root["ApplicationId"] = 57 AND root["DeviceId"] = 126 AND root["TimeStamp"] >= "2021-02-21T17:55:29.7389397Z" AND de0["Name"] = "Use Case"
{
"id": "59ab9323-26ca-436f-8d29-e1ddd826f025",
"DeviceId": 3,
"ApplicationId": 3,
"RawData": "640F7A000A00E30142000000",
"TimeStamp": "2021-02-20T18:36:52.833174Z",
"Items": [
{
"Name": "Battery Status",
"StringValue": "Full",
"DoubleValue": null
},
{
"Name": "Use Case",
"StringValue": null,
"DoubleValue": 12
},
{
"Name": "Battery Voltage",
"StringValue": null,
"DoubleValue": 3.962
},
{
"Name": "Rain Gauge Count",
"StringValue": null,
"DoubleValue": 10
}
],
"_rid": "CgdVAO7B0DNkAAAAAAAAAA==",
"_self": "dbs/CgdVAA==/colls/CgdVAO7B0DM=/docs/CgdVAO7B0DNkAAAAAAAAAA==/",
"_etag": "\"61008771-0000-0d00-0000-603156c50000\"",
"_attachments": "attachments/",
"_ts": 1613846213
}
我需要对数组中的一些项进行聚合,比如说get MAX on temperature或类似的东西(使用用例进行测试,尽管这没有意义)。我推断,如果查询中的所有数据都在一个复合索引中,则数据库可以在不读取文档本身的情况下进行聚合。但是,我似乎根本无法添加包含数组的复合索引。是的,复合索引不能包含数组路径。它应该是标量值 与包含路径或排除路径不同,您不能创建包含路径的路径 /*通配符。每个复合路径的末尾都有一个隐式/ 不需要指定的路径。复合路径会导致 标量值,这是包含在 综合指数
参考:我的路径以标量值结束。我想我也必须从数组中选择一个元素?