Our*_*ros 2 nosql amazon-dynamodb
高级要求:
我正在考虑使用 Dynamo DB 来实现它,通过以以下格式存储数据(使用 NOSQL 的动机是检索速度会很快,因为在一次获取中我将获得整个数据):
{
"userID" : 2323423,
"favs" : [
userIDA,
userIDB,
...
],
"lt" : [
{"timestamp1" : "coordinate1"},
{"timestamp2" : "coordinate2"},
...
]
}
Run Code Online (Sandbox Code Playgroud)
userID 是主键。
查询要求是
我很确定 (1) 是直接使用 List 数据类型上的添加/删除 API。如何解决查询 (2)?如果 UPDATE 查询本身能够以某种方式迭代所有对象并删除旧的对象,那将是最好的。我已经读过 Dynamo DB 所理解的列表中的索引是整数格式,那么我们可以以某种方式利用它吗?列表中的元素是否总是从 0 到 N 索引?如果是这样,我可以从数组的开头删除适当数量的元素。有什么办法吗?
我愿意使用不同的数据模式,但请让我知道整个推理以及如何解决。
1) 属性“favs”应定义为 SET 数据类型,以便使用 DELETE 功能。请注意,您不能对 LIST 数据类型使用 DELETE。
Delete 运算符只能用于 SET。
DELETE - 从集合中删除一个元素。
如果指定了一组值,则将从旧值中减去这些值。例如,如果属性值是集合 [a,b,c] 并且 DELETE 操作指定 [a,c],那么最终的属性值是 [b]。指定一个空集是一个错误。
DELETE 操作仅支持设置数据类型。此外,DELETE 只能用于顶级属性,不能用于嵌套属性。
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"
};
Run Code Online (Sandbox Code Playgroud)
数据:-
"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"
}
}
}]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1101 次 |
| 最近记录: |