逻辑应用中的 CosmosDB 查询:跨分区查询时响应为空

问题描述 投票:0回答:1

在逻辑应用程序中,我使用以下查询文档 V5 活动从 CosmosDB 进行查询:

https://i.sstatic.net/bHgOdXUr.png

我想为此查询活动传递

GameID
列表。但是,即使相同的查询在数据资源管理器中运行良好,CosmosDB 始终在逻辑应用程序中为我返回空响应。

由于这些

GameID
来自不同的分区,因此我特意将分区键字段留空以在所有分区中进行搜索。这是一个示例请求:

{
    "method": "get",
    "queries": {
        "queryText": "SELECT c.Moves, c.WhiteElo, c.BlackElo FROM c WHERE ARRAY_CONTAINS([[\"2013-02-1218\",\"2013-03-1095\",\"2013-01-588\"]], c.GameID)"
    },
    "path": "/v5/cosmosdb/AccountNameFromSettings/dbs/{my-account-name}/colls/games/query",
    "host": {
        "connection": {
            "name": "/subscriptions/2f5a8e0d-7231-4f3a-afae-4c4825eda114/resourceGroups/{my-resource-group-name}/providers/Microsoft.Web/connections/documentdb-2"
        }
    }
}

CosmosDB 的回应:

{
    "statusCode": 200,
    "headers": {
        "Cache-Control": "no-store, no-cache",
        "Pragma": "no-cache",
        "Transfer-Encoding": "chunked",
        "Vary": "Accept-Encoding",
        "Set-Cookie": "ARRAffinity=8cb9eb8a9c8e49bb32964ef5e087477636164e3b1bd119e62b62b2d516d04b33;Path=/;HttpOnly;Secure;Domain=documentdb-cc.azconn-cc-001.p.azurewebsites.net,ARRAffinitySameSite=8cb9eb8a9c8e49bb32964ef5e087477636164e3b1bd119e62b62b2d516d04b33;Path=/;HttpOnly;SameSite=None;Secure;Domain=documentdb-cc.azconn-cc-001.p.azurewebsites.net",
        "Strict-Transport-Security": "max-age=31536000; includeSubDomains",
        "x-ms-request-id": "fe1b4258-368a-4b3f-90c0-aa744576a101",
        "X-Content-Type-Options": "nosniff",
        "X-Frame-Options": "DENY",
        "x-ms-connection-parameter-set-name": "keyBasedAuth",
        "Timing-Allow-Origin": "*",
        "x-ms-apihub-cached-response": "true",
        "x-ms-apihub-obo": "false",
        "Date": "Fri, 03 May 2024 19:28:22 GMT",
        "Content-Type": "application/json",
        "Content-Length": "162",
        "Expires": "-1"
    },
    "body": {
        "value": [],
        "ContinuationToken": null,
        "Count": 0,
        "RequestCharge": 2.8,
        "SessionToken": "0:-1#2152",
        "ActivityId": "1f732ebe-d76b-4001-ace3-4266708c9e33",
        "nextLink": null
    }

以下是数据库中的示例记录。事件是分区键,所以我在不同的事件(如“闪电战”、“古典”等)中查询国际象棋

GameID

{
    "GameID": "2013-01-736",
    "Moves": "1. e4 e5 2. Nf3 d6 3. c3 f5 4. Qe2 f4 5. d4 Nc6 6. dxe5 Nxe5 7. Bxf4 Nxf3+ 8. Qxf3 Nf6 9. Bc4 Qe7 10. O-O Nxe4 11. Re1 Bf5 12. Nd2 O-O-O 13. Nxe4 d5 14. Bxd5 Qd7 15. Ng3 Bg4 16. Bxb7+ Kb8 17. Qe4 g6 18. Ba6 Qd5 19. f3 Bc5+ 20. Be3 Rd6 21. Rad1 Qxe4 22. Nxe4 Rxd1 23. Rxd1 Bxe3+ 24. Kf1 Bc8 25. Nc5 Bxc5 26. b4 Be7 27. b5 Bd8 28. c4 c6 29. Rd6 cxb5 30. cxb5 Kc7 31. Rc6+ Kd7 32. Bxc8+ Ke7 33. Re6+ Kf7 34. Ra6 Re8 35. Rxa7+ Kf8 36. a4 Bb6 37. Ra6 Bc5 38. Bd7 Rd8 39. Bc6 Bb4 40. Ra8 Rxa8 41. Bxa8 Ke7 42. b6 Kd7 43. b7 Kc7 44. Ke2 Kb8 45. Kd3 Ka7 46. Kc4 Ba3 47. Kb5 Bc1 48. g3 Be3 49. Kc6 Bg1 50. Kc7 Bxh2 51. b8=Q+ Ka6 52. Qb6# 1-0",
    "WhiteElo": 1273,
    "BlackElo": 1168,
    "TimeControl": "300+5",
    "Event": "Classical"
}

我还发现,如果我在列表中仅指定一个 GameID(例如,[“2013-01-736”]),即使不指定分区键,查询也会按预期工作。

具有类似问题的其他线程建议使用

ContinuationToken
来检索剩余的结果,但在我的情况下它是空的。

还有一些关于将

EnableCrossPartitionQuery
设置为 true 的提示,但我在 Logic App 中找不到修改请求标头的选项。 CosmosDB SDK V3 可能已默认启用它

azure-cosmosdb azure-logic-apps azure-cosmosdb-sqlapi
1个回答
0
投票

所以...这是从通话中提取的您的查询:

SELECT c.Moves, c.WhiteElo, c.BlackElo
FROM c
WHERE ARRAY_CONTAINS([["2013-02-1218","2013-03-1095","2013-01-588"]], c.GameID)

问题是

ARRAY_CONTAINS()
的第一个参数需要是一个值数组,并且以某种方式将其包装在外部数组中,因此在您的情况下,整个值数组被视为 单个值

如果删除外部数组,则

ARRAY_CONTAINS()
应该可以正常工作:

SELECT c.Moves, c.WhiteElo, c.BlackElo
FROM c
WHERE ARRAY_CONTAINS(["2013-02-1218","2013-03-1095","2013-01-588"], c.GameID)
© www.soinside.com 2019 - 2024. All rights reserved.