例如,假设我在Cosmos文档数据库中有一个看起来像这样的文档:
{
"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”中任何值的部分匹配项吗?
感谢我所能获得的所有帮助。 谢谢
答案 0 :(得分:1)
能否请您尝试以下查询:
SELECT VALUE c FROM c JOIN s in c.data.meta.myStringArray WHERE CONTAINS(s, "OneStrin")
SQL language reference for Azure Cosmos DB - 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
}]