当前位置:  开发笔记 > 编程语言 > 正文

如何将DynamoDB属性设置为空列表?

如何解决《如何将DynamoDB属性设置为空列表?》经验,为你挑选了1个好方法。

我正在尝试使用适用于.NET的AWS开发工具包中的DynamoDBv2库,通过更新请求将DynamoDB文档中的属性设置为空列表。

我尝试了显而易见的更新表达式,但没有成功:

// Fails, expression attribute values cannot contain an empty list
...
ExpressionAttributeValues = new Dictionary {
    { ":empty", new AttributeValue { L = new List { } } },
},
UpdateExpression = "SET #P.MyList = :empty",
...

我该如何实现?



1> 小智..:

深入研究AWS开发工具包源代码后,我找到了答案。关键是该IsLSet属性是可设置的。这将调用以下代码:

public static void SetIsSet(bool isSet, ref List field)
{
    if (isSet)
        field = new AlwaysSendList(field);
    else
        field = new List();
}

在确定是否初始化AttributeValue时,将使用以下代码:

public static bool GetIsSet(List field)
{
    if (field == null)
        return false;

    if (field.Count > 0)
        return true;

    var sl = field as AlwaysSendList;
    if (sl != null)
        return true;

    return false;
}

这也说明了为什么使用new AttributeValue { L = new List { } }没有达到预期的效果-当方法Count为0时,此方法将返回false。但是,AlwaysSendList如果设置了IsLSet属性,则对特殊类型的检查将返回true 。

回到您的代码,答案是使用以下命令:

...
ExpressionAttributeValues = new Dictionary {
    { ":empty", new AttributeValue { IsLSet = true } },
},
UpdateExpression = "SET #P.MyList = :empty",
...

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有