首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从DynamoDB中的地图列表中删除(必须是原子的)

如何从DynamoDB中的地图列表中删除(必须是原子的)
EN

Stack Overflow用户
提问于 2016-08-18 09:17:57
回答 1查看 4.9K关注 0票数 5

我有一个模式:

代码语言:javascript
复制
{
   product: S // Primary Key, // my Hash
   media: L // List of Maps
}

每一个媒体项目都是这样的:

代码语言:javascript
复制
[
   { 
      id: S, // for example: id: uuid()
      type: S, // for example: "image"
      url: S // for example: id: "http://domain.com/image.jpg"
   }
]

样本数据:

代码语言:javascript
复制
{
    product: "IPhone 6+",
    media: [
        {
            id: "1",
            type: "image",
            url: "http://www.apple.com/iphone-6-plus/a.jpg"
        },
        {
            id: "2",
            type: "image",
            url: "http://www.apple.com/iphone-6-plus/b.jpg"
        },
        {
            id: "3",
            type: "video",
            url: "http://www.apple.com/iphone-6-plus/overview.mp4"
        }
    ]
}

我希望能够从媒体列表中删除id。比如:“从产品:'IPhone 6+',删除id:‘2’的媒体。”

查询之后,数据应该如下所示:

代码语言:javascript
复制
{
    product: "IPhone 6+",
    media: [
        {
            id: "1",
            type: "image",
            url: "http://www.apple.com/iphone-6-plus/a.jpg"
        },
        {
            id: "3",
            type: "video",
            url: "http://www.apple.com/iphone-6-plus/overview.mp4"
        }
    ]
}

我应该如何表达这样的查询?我在UpdateItem上看到了一篇文章,但是我找不到这个查询类型的好例子。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-19 14:21:16

不幸的是,API没有这个特性。如果您知道索引,最接近的方法就是从"List“数据类型中删除一个条目。

我知道大多数时候索引可能是不可用的。但是,如果没有任何其他解决方案,则可以查看此备选选项。

您还需要了解,即使DynamoDB开始支持诸如List、Map和Set等文档数据类型,但您不能执行某些操作。一些特性还有待在API中添加。我相信这种情况就是其中之一。

我使用删除从列表中删除项目。

代码语言:javascript
复制
var params = {
        TableName : "Product",
        Key : {
            "product" : "IPhone 6+"
        },
        UpdateExpression : "REMOVE media[0]",       
        ReturnValues : "UPDATED_NEW"
    };

console.log("Updating the item...");
docClient.update(params, function(err, data) {
    if (err) {
        console.error("Unable to update item. Error JSON:", JSON.stringify(err, null, 2));
    } else {
        console.log("UpdateItem succeeded:", JSON.stringify(data));
    }
});

,这只是供你参考:-

Delete运算符只能在SET上使用。

删除-从中删除一个元素。 如果指定了一组值,则从旧集中减去这些值。例如,如果属性值为设置a、b、c,而DELETE操作指定a,c,则最终属性值为b。指定空集是错误。 DELETE操作仅支持集数据类型。此外,DELETE只能用于顶层属性,而不能用于嵌套属性.

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39014352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档