繁体   English   中英

azure cosmosdb 是否像任何运算符一样查找与模式匹配的记录

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM