2

我在 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 * from ABCCollection r where  BatchId='XYZ'
 AND Contains(r.CommandTimeToLiveMinutes,9) 

不返回任何结果 谢谢

4

2 回答 2

0

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

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

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

或者,我可以想到不同的方法,但这需要模式更改,即您可以将其存储GenerationTimeLiveMinutes为字符串,这样您就可以轻松搜索它。

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

以下是使用 cosmos DB sql 查询的一些提示和技巧:

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

于 2019-11-26T08:13:04.300 回答
0

在你的 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
于 2019-11-26T08:21:44.153 回答