azure-cosmosdb-sqlapi - 在 CosmosDB 中使用单个字符串值进行 ARRAY_CONTAINS 查询
问题描述
例如,假设我在 Cosmos 文档 DB 中有一个文档,看起来像这样:
{
"somename" : "myname"
"data": {
"meta": {
"versionId": "1",
"lastUpdated": "somedate",
"myStringArray": [
"OneString",
"AnotherString"
]
}
}
}
我想编写一个 Cosmos SQL 查询,我可以在其中搜索“myStringArray”中的部分匹配项。我一直在尝试使用 ARRAY_CONTAINS 但无法使其正常工作,因为它似乎只查看数组中的给定值。
例如
ARRAY_CONTAINS(data.meta.myStringArray, 'OneString')
适用于全场比赛。
我看到的搜索部分匹配的例子是
ARRAY_CONTAINS(data.meta.myStringArray, {'TheValueIDontHave' : 'OneStrin'}, true)
这显然行不通,因为我在“myStringArray”中只有单个字符串。
我猜我可能能够将 STARTSWITH 与 ARRAY_CONTAINS 结合起来,或者可能应用一些 JOINS,但我卡住了,无法解决。
在 CosmosDb 中是否有任何方法可以搜索“myStringArray”中任何值的部分匹配?
感谢我能得到的所有帮助。谢谢
解决方案
你能试试这个查询吗:
SELECT VALUE c FROM c JOIN s in c.data.meta.myStringArray WHERE CONTAINS(s, "OneStrin")
Azure Cosmos DB 的 SQL 语言参考 - ARRAY_CONTAINS
ARRAY_CONTAINS (<arr_expr>, <expr> [, bool_expr])
检查对象而不是子字符串的布尔表达式:
如果它设置为“true”并且指定的搜索值是一个对象,则该命令会检查部分匹配(搜索对象是其中一个对象的子集)。如果设置为“false”,则该命令会检查数组中所有对象的完全匹配。
以下示例如何使用 ARRAY_CONTAINS 检查数组中 JSON 的部分匹配。
SELECT
ARRAY_CONTAINS([{"name": "apples", "fresh": true}, {"name": "strawberries", "fresh": true}], {"name": "apples"}, true),
ARRAY_CONTAINS([{"name": "apples", "fresh": true}, {"name": "strawberries", "fresh": true}], {"name": "apples"}),
ARRAY_CONTAINS([{"name": "apples", "fresh": true}, {"name": "strawberries", "fresh": true}], {"name": "mangoes"}, true)
这是结果集。
[{
"$1": true,
"$2": false,
"$3": false
}]
推荐阅读
- python - 使用 Python 和 Google Places API 收集地点
- html - 使用事件发射器在 Angular 中将组件下拉值向上发送两级
- bixby - Mac 上 Bixby Studio 模拟器中的麦克风输入错误
- c# - Unity - C#:如何在不同场景中使用值?
- java - 我对我们使用 next.Line 的 java 中的此扫描仪代码有疑问。它适用于我的一个代码,但不适用于另一个代码
- docker - docker 容器中的 Tmux 主题
- javascript - 使用 nodejs + mongodb 软删除
- html - 我的按钮居中,即使我输入 text-align: left;
- c - 称为对象“calculateTaxes”的错误不是函数或函数指针
- php - 基于会话在视图中显示数据