我可以在Azure Cosmos DB的复合索引中为数组编制索引吗?

我可以在Azure Cosmos DB的复合索引中为数组编制索引吗?,azure,azure-cosmosdb,Azure,Azure Cosmosdb,我在Azure Cosmos DB中索引数组时遇到问题 我正在尝试通过门户保存此索引策略 { "indexingMode": "consistent", "automatic": true, "includedPaths": [ { "path": "/*" } ], "e

我在Azure Cosmos DB中索引数组时遇到问题

我正在尝试通过门户保存此索引策略

{
    "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或类似的东西(使用用例进行测试,尽管这没有意义)。我推断,如果查询中的所有数据都在一个复合索引中,则数据库可以在不读取文档本身的情况下进行聚合。但是,我似乎根本无法添加包含数组的复合索引。

是的,复合索引不能包含数组路径。它应该是标量值

与包含路径或排除路径不同,您不能创建包含路径的路径 /*通配符。每个复合路径的末尾都有一个隐式/ 不需要指定的路径。复合路径会导致 标量值,这是包含在 综合指数


参考:

我的路径以标量值结束。我想我也必须从数组中选择一个元素?