与Azure CosmosDB中的查询一样

arj*_*oon 12 azure azure-cosmosdb azure-cosmosdb-sqlapi

我想通过以下查询从Cosmos DB中检索数据:

pi

(这是一个sql查询,我可以在mysql中使用)

这是pi一个字符串值.这可以是09001001或09025001.

那么有没有办法在Cosmos DB中使用like命令.我知道cosmos DB使用CONTAINS,但是当类似的通配符不在字符串的开头或结尾时,不能使用它.

Saj*_*ran 22

目前Azure Cosmosdb支持CONTAINS,STARTSWITH以及ENDSWITH内置的功能,这相当于等.

Cosmosdb中LIKE的关键字是COntains.

SELECT * FROM c WHERE CONTAINS(c.pi, '09')
Run Code Online (Sandbox Code Playgroud)

  • 那部分是解决方案。如果pi包含字符串09001053。然后,将从您的答案中带有查询的数据库中获取该条目。那么解决方案将是:`SELECT * FROM c WHERE STARTSWITH(c.pi,'09')and ENDSWITH(c.pi,'001')。附言 我已经对您的链接进行了投票。 (6认同)

404*_*404 2

另一种可能性是创建您自己的用户定义函数。例如,这是一个正则表达式检查:

function matchRegex(str, pattern) {
    let regex=RegExp(pattern);
    return regex.test(str);
}
Run Code Online (Sandbox Code Playgroud)

以该名称创建,MATCH_REGEX然后可以像这样使用:

SELECT udf.MATCH_REGEX("09001001", "^09.*001$")
Run Code Online (Sandbox Code Playgroud)

请注意:它会杀死任何索引优化STARTSWITH。尽管允许更复杂的模式。因此,使用能够使用索引来缩小搜索范围的附加过滤器可能是有益的。例如,StartsWith(c.property1, '09')在子句中用作上述示例的补充WHERE

更新:

Cosmos 现在有一个RegexMatch function可以做同样的事情。虽然 MongoApi 的文档提到$regex如果遵循某些规则,可以使用索引来优化查询,但 SqlApi 的情况似乎并非如此(目前)。