簡體   English   中英

Azure CosmosDB 用戶定義 Function 返回等於表中記錄總數的記錄

[英]Azure CosmosDB User Defined Function returns records equal to the total number of records in the table

我只是不了解 CosmosDB 中用戶定義的函數是如何工作的。

為什么 Cosmos DB 中的我的 UDF 返回的結果等於表中的記錄數?

我的表目前有 4 條記錄。

以下是記錄——

{
    "users": [
        {
            "partitionKey": "user",
            "userPhoneNumber": "14168000000",
            "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"
        }
    ]
}

這是我的 UDF -

function findUserByPhoneNumber(users, contactNumbers){
    var result;
    for (let i = 0; i < contactNumbers.length; i++) {
        if (contactNumbers[i] == "14168000000") {
            result = contactNumbers[i];
        }
    return result;
}

這是我的 SQL -

SELECT udf.findUserByPhoneNumber(c,["14168000000","17200000000"]) FROM c

這是我得到的結果 -

[
    {
        "$1": "14168000000"
    },
    {
        "$1": "14168000000"
    },
    {
        "$1": "14168000000"
    },
    {
        "$1": "14168000000"
    }
]

我只希望返回一條記錄。

查詢中的SELECT語句永遠不會幫助您過濾查詢中的項目。 如果你想過濾你應該在你的查詢中使用WHERE 雖然您可以在返回例如 boolean 的WHERE語句中使用 UDF,但您通常應該避免使用它,因為數據庫無法使用它索引來有效檢索數據,並且必須在每個文檔上使用 UDF 來計算是否應該檢索它.

對於您的場景,查詢可能是:

SELECT * 
FROM c
WHERE ARRAY_CONTAINS(['14168000000', '17200000000'], c.userPhoneNumber)

你的 UDF 總是返回14168000000的原因是因為你總是使用數組['14168000000', '17200000000']作為你的 UDF 的輸入並檢查這些值中的任何一個是否等於14168000000並返回它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM