【问题标题】:ARRAY_CONTAINS query with single string values in CosmosDB在 CosmosDB 中使用单个字符串值进行 ARRAY_CONTAINS 查询
【发布时间】:2018-09-07 12:28:50
【问题描述】:

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

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

【问题讨论】:

    标签: azure-cosmosdb-sqlapi


    【解决方案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
    }]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-29
      • 1970-01-01
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-02-07
      • 2011-04-18
      • 1970-01-01
      相关资源
      最近更新 更多