对于DynamoDB项目,仅在该列表中不存在该元素时,该列表才能附加一个是密钥值的列表?

发布于 2025-02-11 23:33:28 字数 551 浏览 0 评论 0原文

我在DynamoDB中有一个项目,其键具有值作为列表。我想用新元素附加该列表,只有当它们尚未存在该列表中的情况下。我不想复制该列表中的任何元素。项目的结构如下所示:

{
 "username": "blabla",
 "my_list": ["element1","element2"]
}

我在Python中使用BOTO3库,这是我的更新代码块:

response = my_table.update_item(
    Key = {
        'username': "blabla"
    },
    UpdateExpression="SET my_list = list_append(my_list, :i)",
    ExpressionAttributeValues={
        ':i': ["element1"],
    },
    ReturnValues="UPDATED_NEW"
)

我尝试在Update Expression中使用IF_NOT_EXIST(),但始终有语法错误。如何正确实现此目标?谢谢。

I have an item in DynamoDB that has a key which has values as a list. I want to append that list with new elements, only if they are not already exists in that list. I don't want to duplicate any element in that list. Item's structure is like below:

{
 "username": "blabla",
 "my_list": ["element1","element2"]
}

I use boto3 library in Python and this is my code block for the update:

response = my_table.update_item(
    Key = {
        'username': "blabla"
    },
    UpdateExpression="SET my_list = list_append(my_list, :i)",
    ExpressionAttributeValues={
        ':i': ["element1"],
    },
    ReturnValues="UPDATED_NEW"
)

I tried to use if_not_exist() in UpdateExpression but always got syntax errors. How can i properly achieve this goal? Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鹿港小镇 2025-02-18 23:33:28

您不应使用列表需要使用像DataType这样的字符串集:

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/howitworks.namingrulesdatatypes.html

将值添加值

用于 =“ https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/expressions.updateexpressions.html#expressions.updateexpressions.updateexpressions.add” /amazondynamodb/latest/developerguide/expressions.updateexpressions.html#expressions.updateexpressions.add <

更改代码。

{
 "username": "blabla",
 "my_list": set(["element1","element2"])
}

# ---

response = my_table.update_item(
    Key = {
        'username': "blabla"
    },
    UpdateExpression="ADD my_list :i",
    ExpressionAttributeValues={
        ':i': set(["element1"]),
    },
    ReturnValues="UPDATED_NEW"
)

ad 根据此,您可以像以下答案

/ stackoverflow.com/a/56861830/13055947"> https://stackoverflow.com/a/56861830/13055947

You should not use a list you need to use a String Set like defined as datatype here:

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.NamingRulesDataTypes.html

For adding values to a Set you need to use ADD UpdateOperation like described here

https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.UpdateExpressions.html#Expressions.UpdateExpressions.ADD

According to this you can change your code like

{
 "username": "blabla",
 "my_list": set(["element1","element2"])
}

# ---

response = my_table.update_item(
    Key = {
        'username': "blabla"
    },
    UpdateExpression="ADD my_list :i",
    ExpressionAttributeValues={
        ':i': set(["element1"]),
    },
    ReturnValues="UPDATED_NEW"
)

This answer shows howto remove items from the set again

https://stackoverflow.com/a/56861830/13055947

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文