CosmosDB中具有单个字符串值的ARRAY_CONTAINS查询

时间:2018-09-07 12:28:51

标签: azure-cosmosdb-sqlapi

例如,假设我在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”中任何值的部分匹配项吗?

感谢我所能获得的所有帮助。 谢谢

1 个答案:

答案 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
}]