Azure Cosmos UDF在密钥不存在时返回默认值
我在Cosmos中有一个文档结构,通常如下所示:Azure Cosmos UDF在密钥不存在时返回默认值,azure,azure-cosmosdb,user-defined-functions,Azure,Azure Cosmosdb,User Defined Functions,我在Cosmos中有一个文档结构,通常如下所示: { "Item No": "123456", "Item Desc": "This is a description.", "images": { "https://somedomain.com/image1.png", "https://somedomain.com/image2.png", } } 有时会出现空图像值,例如: { "Item No": "123456",
{
"Item No": "123456",
"Item Desc": "This is a description.",
"images": {
"https://somedomain.com/image1.png",
"https://somedomain.com/image2.png",
}
}
有时会出现空图像值,例如:
{
"Item No": "123456",
"Item Desc": "This is a description.",
"images": {
"",
""
}
}
{
"Item No": "123456",
"Item Desc": "This is a description."
}
我编写了一个UDF(用户定义函数),它将用默认值替换任何空值:
功能缺失图像(文档、道具){
如果(单据类型[prop]=“未定义”| |单据[prop]=“未定义”| |单据[prop]=“空”){
返回“https://via.placeholder.com/150";
}
}
如果图像url为空,我将返回此返回(正确):
我的SELECT
查询如下所示:
{
"Item No": "123456",
"Item Desc": "This is a description.",
"images": {
"https://somedomain.com/image1.png",
"https://somedomain.com/image2.png",
}
}
“c.id、c[‘项目编号’]、c[‘项目描述’]、自定义项缺失图像(c.images[0])作为图像”
但是,在根本不存在图像键的情况下,例如:
{
"Item No": "123456",
"Item Desc": "This is a description.",
"images": {
"",
""
}
}
{
"Item No": "123456",
"Item Desc": "This is a description."
}
我无法收回我的默认值
我的问题:如何修改我的UDF或查询,如果
images
键不存在,我仍然返回默认值?首先,您提供的示例文档的json格式不正确
我想应该是这样的:
您可以修改udf函数,如下所示:
function missingImage(images) {
for(var i =0;i<images.length;i++){
if (typeof images[i] === "undefined" || images[i] === "" || images[i] === null) {
images[i] = "https://via.placeholder.com/150";
}
}
return images;
}
首先,您提供的示例文档的json格式不正确 我想应该是这样的: 您可以修改udf函数,如下所示:
function missingImage(images) {
for(var i =0;i<images.length;i++){
if (typeof images[i] === "undefined" || images[i] === "" || images[i] === null) {
images[i] = "https://via.placeholder.com/150";
}
}
return images;
}
谢谢@jay gong的时间和回复,但这并不能解决这个问题。当文档中根本不存在
images
键时,我正在寻找一种返回默认值的方法
我觉得这里的答案不是通过UDF,而是需要在查询级别解决。我这样做是基于这样一个事实,即如果我直接返回默认值,正如您在下面的UDF示例中所看到的那样,我不会返回图像
Cosmos中的文件:
{
"id": "8fdc9f47-6209-455d-9b9c-482341bb3170",
"Item No": "123456",
"Item Desc": "This is a description."
}
UDF:
功能丢失图像(图像){
返回“https://via.placeholder.com/150";
}
查询:
从c.id中选择c.id、c['Item No']、c['Item Desc']、udf.missingImage(c.images)
报税表:
[
{
"id": "8fdc9f47-6209-455d-9b9c-482341bb3170",
"Item No": "123456",
"Item Desc": "This is a description."
}
]
更新:
我想出了一个解决方案,那就是使用is_DEFINED
检查images
键是否已定义。如果不是,则返回false,这将在UDF中为我提供一些操作
查询:
选择c.id,
c[‘项目编号’],
c[“项目说明”],
udf.missingImage((定义为(c.images)=真?c.images:假))
来自c
UDF:
功能丢失图像(图像){
如果(图像==false){
返回“https://via.placeholder.com/150";
}
返回图像;
}
感谢@jay gong的时间和回复,但这并不能解决问题。当文档中根本不存在images
键时,我正在寻找一种返回默认值的方法
我觉得这里的答案不是通过UDF,而是需要在查询级别解决。我这样做是基于这样一个事实,即如果我直接返回默认值,正如您在下面的UDF示例中所看到的那样,我不会返回图像
Cosmos中的文件:
{
"id": "8fdc9f47-6209-455d-9b9c-482341bb3170",
"Item No": "123456",
"Item Desc": "This is a description."
}
UDF:
功能丢失图像(图像){
返回“https://via.placeholder.com/150";
}
查询:
从c.id中选择c.id、c['Item No']、c['Item Desc']、udf.missingImage(c.images)
报税表:
[
{
"id": "8fdc9f47-6209-455d-9b9c-482341bb3170",
"Item No": "123456",
"Item Desc": "This is a description."
}
]
更新:
我想出了一个解决方案,那就是使用is_DEFINED
检查images
键是否已定义。如果不是,则返回false,这将在UDF中为我提供一些操作
查询:
选择c.id,
c[‘项目编号’],
c[“项目说明”],
udf.missingImage((定义为(c.images)=真?c.images:假))
来自c
UDF:
功能丢失图像(图像){
如果(图像==false){
返回“https://via.placeholder.com/150";
}
返回图像;
}
您好,我的答案对您有帮助吗?蜡笔。没有,请查看我在下面发布的回复。好的。很高兴你已经解决了你的问题。嗨,我的答案对你有帮助吗?蜡笔。没有,请看我在下面发布的回复。好的。很高兴你已经解决了你的问题。