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