createUserDefinedFunction :如果已经存在?
createUserDefinedFunction : if already exists?
我正在使用 azure-documentdb java SDK 来创建和使用 "User Defined Functions (UDFs)"
所以从 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" 函数但没有成功。任何例子/其他想法?
也许从长远来看,我们是否应该在 azure feedback
上建议 "createOrReplaceUserDefinedFunction(...)"
您可以使用 queryUserDefinedFunctions
.
通过 运行 查询检查现有 UDF
示例:
List<UserDefinedFunction> udfs = client.queryUserDefinedFunctions(
myCollection.getSelfLink(),
new SqlQuerySpec("SELECT * FROM root r WHERE r.id=@id",
new SqlParameterCollection(new SqlParameter("@id", myUdfId))),
null).getQueryIterable().toList();
if (udfs.size() > 0) {
// Found UDF.
}
.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 异常。
我正在使用 azure-documentdb java SDK 来创建和使用 "User Defined Functions (UDFs)"
所以从 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" 函数但没有成功。任何例子/其他想法?
也许从长远来看,我们是否应该在 azure feedback
上建议 "createOrReplaceUserDefinedFunction(...)"您可以使用 queryUserDefinedFunctions
.
示例:
List<UserDefinedFunction> udfs = client.queryUserDefinedFunctions(
myCollection.getSelfLink(),
new SqlQuerySpec("SELECT * FROM root r WHERE r.id=@id",
new SqlParameterCollection(new SqlParameter("@id", myUdfId))),
null).getQueryIterable().toList();
if (udfs.size() > 0) {
// Found UDF.
}
.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 异常。