gpt4 book ai didi

amazon-dynamodb - 从 dynamoDB 列表数据类型中删除前几个条目

转载 作者:行者123 更新时间:2023-12-03 23:37:26 24 4
gpt4 key购买 nike

高水平要求:

  • 可能有数百万用户
  • 任何用户都可以收藏其他用户
  • 需要存储用户的位置跟踪数据。最多必须存储 100 个最新数据点。

我正在考虑使用 Dynamo DB 来实现它,通过以以下格式存储数据(使用 NOSQL 的动机是检索速度会很快,因为一次获取​​我将获得整个数据):

{
"userID" : 2323423,
"favs" : [
userIDA,
userIDB,
...
],
"lt" : [
{"timestamp1" : "coordinate1"},
{"timestamp2" : "coordinate2"},
...
]
}

userID 是主键。

查询要求为

  1. 添加或删除收藏夹应该是可能的。
  2. 可能会出现一堆新的时间戳 <=> GPS 位置对,我需要将其输入到该用户的“lt”数据中。由于 LT 数据点的限制为 100 个,因此我还需要删除最旧的数据点。

我非常确定 (1) 可以直接使用列表数据类型上的添加/删除 API。如何解决查询(2)?如果 UPDATE 查询本身能够以某种方式迭代所有对象并删除旧的对象,那就最好了。我读到 Dynamo DB 所理解的列表中的索引是整数格式,那么我们可以以某种方式利用它吗?列表中的元素是否总是从 0 到 N 进行索引?如果是这样,我可以从数组的开头删除适当数量的元素。有什么办法可以做到吗?

我愿意使用不同的数据模式,但请让我知道整个推理以及如何解决这个问题。

最佳答案

1) 属性“favs”应定义为 SET 数据类型才能使用 DELETE 功能。请注意,您不能对 LIST 数据类型使用 DELETE。

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

DELETE - Deletes an element from a set.

If a set of values is specified, then those values are subtracted from the old set. For example, if the attribute value was the set [a,b,c] and the DELETE action specifies [a,c], then the final attribute value is [b]. Specifying an empty set is an error.

The DELETE action only supports set data types. In addition, DELETE can only be used on top-level attributes, not nested attributes.

2) 要从 LIST 数据类型中删除出现的事件(即对象),您应该知道索引。更新表达式可能如下所示:-

UpdateExpression : "REMOVE lt[0]"- 删除一个元素

UpdateExpression : "REMOVE lt[0] lt[1]"- 删除元素 0 和 1

是的,对于 LIST 数据类型,索引从 0 到 N 开始。

3) 有条件地删除项目 - 是的,您可以在 ConditionExpression 中包含条件。但是,REMOVE 需要列表项的索引。否则,它将删除整个列表(即不是列表中的特定索引)。

此外,当您想引用列表中的 MAP 对象时,您需要列表的索引。

示例:要删除 media.id=3,条件和更新表达式应如下所述:-

请注意,条件表达式和更新表达式中都使用索引。

删除“media.id”= 3的JavaScript语法:-

var params = {
TableName : "Product",
Key : {
"product" : "IPhone 7+"
},
UpdateExpression : "REMOVE media[2]",
ConditionExpression: "media[2].id = :idvalue",
ExpressionAttributeValues: {":idvalue" : "3",
},
ReturnValues : "UPDATED_NEW"
};

数据:-

"media": {
"L": [{
"M": {
"url": {
"S": "http://www.apple.com/iphone-6-plus/a.jpg"
},
"type": {
"S": "image"
},
"id": {
"S": "1"
}
}
}, {
"M": {
"url": {
"S": "http://www.apple.com/iphone-6-plus/b.jpg"
},
"type": {
"S": "image"
},
"id": {
"S": "2"
}
}
}, {
"M": {
"url": {
"S": "http://www.apple.com/iphone-6-plus/overvie
w.mp4 "
},
"type": {
"S": "video"
},
"id": {
"S": "3"
}
}
}]
}

关于amazon-dynamodb - 从 dynamoDB 列表数据类型中删除前几个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39141754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com