在数字字段上搜索 CosmosDb 字符串

CosmosDb string search on numeric field

我在 Cosmos DB 中有如下字段

{
    "BatchId": "XYZ",
    "abc": "OK",
    "sdf": "324234",
    "sfd": "234",
    "DeType": "234",
    "werwe": "werwe",
    "werwer": "low",
    "GenerationTimeLiveMinutes": 129
}

我这里有一个 .net UI,它有一个搜索字段。我在这里的要求是根据提供的搜索条件显示所有记录。也就是说,如果我在 GenerationTimeLiveMinutes(数字字段)中给出“9”,它应该显示 包含 9 的所有记录。 我可以使用 UDF 来实现这一点,但我们不应该根据客户端使用 UDF。我们可以使用 cosmos select 查询来实现吗?

 select * from ABCCollection r where  BatchId='XYZ'
 AND Contains(r.CommandTimeToLiveMinutes,9) 

没有return任何结果 谢谢

AFAIK,Contains() 是一个用于通配符搜索的字符串函数,您只能将 conatins 用于字符串目的。

我已经尝试重现相同的场景并且它像你提到的那样工作因为它没有 return 当我尝试在数字中使用它时没有任何结果。

我看到您将数字字段转换为字符串并尝试在其上使用包含的唯一选项。但这可能首先需要使用 UDF。

或者,我可以想出不同的方法,但这需要更改架构,您可以通过这种方式将 GenerationTimeLiveMinutes 存储为字符串您将能够轻松搜索它。

随时在您的对话中标记我,希望对您有所帮助。

这里有一些使用 cosmos DB sql 查询的提示和技巧:

https://www.red-gate.com/simple-talk/sql/nosql-databases/sql-for-cosmos-db-tips-and-tricks/

在你的 sql 中使用 ToString:

SELECT c.id,c.num FROM c
where contains(tostring(c.num),"9") = true

对你来说,sql 应该是这样的:

select * from ABCCollection r where  BatchId='XYZ'
 AND Contains(Tostring(r.CommandTimeToLiveMinutes),"9") = true