Azure Cosmos UDF在密钥不存在时返回默认值

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",

我在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 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";
}
返回图像;
}

您好,我的答案对您有帮助吗?蜡笔。没有,请查看我在下面发布的回复。好的。很高兴你已经解决了你的问题。嗨,我的答案对你有帮助吗?蜡笔。没有,请看我在下面发布的回复。好的。很高兴你已经解决了你的问题。