[英]Does azure cosmosdb have like any operator to find records matching a pattern
我只是想知道如何在 Azure CosmosDB 上使用 SQL API 执行以下操作 -
SELECT user_id FROM users WHERE user_id LIKE ANY(contacts);
以上语句在postgres上有效,想知道Azure CosmosDB中有没有类似的东西。
上面的语句接收一组联系人,格式为数组 ["4160000000","7780000000"] 并在 Postgres 数据库中找到相应的记录。
更新@Sajeetharan
以下是我在 Cosmos DB 中的文档-
{
"users": [
{
"partitionKey": "user",
"userPhoneNumber": "14161231234",
"userDisplayName": "Test User 1"
},
{
"partitionKey": "user",
"userPhoneNumber": "18055678978",
"userDisplayName": "Test User 2"
},
{
"partitionKey": "user",
"userPhoneNumber": "17202228799",
"userDisplayName": "Test User 3"
},
{
"partitionKey": "user",
"userPhoneNumber": "17780265987",
"userDisplayName": "Test User 4"
}
]
}
我将以如下所示的数组格式从 8822996504788 发送一组 userPhoneNumbers,然后我需要 SQL 查询以返回 cosmos db 中的相应记录。
var userPhoneNumbers = ["4161231234","7202228799"];
上面的数组有两个值,发送到 cosmosdb 时应该返回第一条和第三条记录。
发送的 userPhoneNumbers 有时会缺少国家代码,因此应使用 CONTAINS 或 ENDSWITH 执行搜索。
请指教!
如问题所述,需要对作为数组传递的电话号码执行类似的操作。 在 cosmosDb 中没有内置的 function 可以帮助我们实现结果。 达到预期结果的方法是使用 cosmosDb UDF。 下面是相同的代码片段。
function findUserNameByPhone(users, userPhoneNumbers) {
var s, i, j;
let result = [];
for(j = 0; j < userPhoneNumbers.length; j++)
{
for (i = 0; i < users.length; i++)
{
s = users[i];
if(s.userPhoneNumber.match(userPhoneNumbers[j]))
result = result.concat(s);
}
}
return result;
}
在查询中使用 udf:-
SELECT udf.findUserNameByPhone(c.users,["4161231234","7202228799"]) FROM c
使用 Node.js 在 Cosmos DB 中使用参数化查询检查此处
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.