createUserDefinedFunction:如果已经存在?

时间:2015-06-09 14:43:15

标签: java azure-cosmosdb

我使用azure-documentdb java SDK来创建和使用"用户自定义函数(UDF)"

所以从official documentation我终于找到了如何创建UDF的方式(使用Java客户端)

String regexUdfJson = "{"
          + "id:\"REGEX_MATCH\","
          + "body:\"function (input, pattern) { return input.match(pattern) !== null; }\","
          + "}";
UserDefinedFunction udfREGEX = new UserDefinedFunction(regexUdfJson);
getDC().createUserDefinedFunction(
    myCollection.getSelfLink(),
    udfREGEX,
    new RequestOptions());

这是一个示例查询:

SELECT * FROM root r WHERE udf.REGEX_MATCH(r.name, "mytest_.*")

我必须只创建一次UDF,因为如果我尝试重新创建现有的UDF,我会遇到异常:

DocumentClientException: Message: {"Errors":["The input name presented is already taken. Ensure to provide a unique name property for this resource type."]}

如何知道UDF是否已经存在? 我尝试使用" readUserDefinedFunctions"功能没有成功。任何示例/其他想法?

也许从长远来看,我们是否应该建议" createOrReplaceUserDefinedFunction(...)"在azure feedback

2 个答案:

答案 0 :(得分:2)

您可以使用ith运行查询来检查现有UDF。

示例:

queryUserDefinedFunctions

答案 1 :(得分:0)

.NET用户的答案。

`var collectionAltLink = documentCollections["myCollection"].AltLink; // Target collection's AltLink
var udfLink = $"{collectionAltLink}/udfs/{sampleUdfId}"; // sampleUdfId is your UDF Id
var result = await _client.ReadUserDefinedFunctionAsync(udfLink);
var resource = result.Resource;
if (resource != null)
{
   // The UDF with udfId exists
}`

这里_client是Azure的DocumentClient,而documentCollections是您的documentDb集合的字典。

如果上述集合中没有此类UDF,则_client会引发 NotFound 异常。