DynamoDB 从 属性 等于值的列表中删除地图
DynamoDB remove Map from List where property equals value
如何使用 属性 值删除 dynamo 列表中的地图?
这是 dynamo 记录结构
{
"authorizedUsers": [
{
"name": "Bob",
"phoneNumber": "822-222-2221"
},
{
"name": "Joe",
"phoneNumber": "111-111-2221"
}
],
"PK": "users"
}
目前我有
var params = {
TableName: 'userTable',
Key: {
PK: 'users'
},
UpdateExpression: 'REMOVE authorizedUsers[0]',
ReturnValues: 'UPDATED_NEW'
};
try {
await docClient.update(params).promise();
} catch (e) {
throw new Error(e.message);
}
这会删除第一条记录没问题,但我需要表达式更加动态并且能够通过 phoneNumber(唯一标识符)删除行
我如何修改它以使用 phoneNumber 识别要删除的列表中的正确地图?
您不能使用 phoneNumber
来标识列表中的地图项。
您声明 phoneNumber
是唯一标识符。我建议将您的项目的模型更改为不使用数组,而是使用以 phoneNumber
作为键的映射。
{
"authorizedUsers": {
"822-222-2221": {
"name": "Bob",
"phoneNumber": "822-222-2221"
},
"111-111-2221": {
"name": "Joe",
"phoneNumber": "111-111-2221"
}
,
"PK": "users"
}
如果您无法更改项目的结构,请考虑对项目和 over-writing 整个 authorizedUsers
数组属性进行版本控制。您将希望在所有项目上创建一个 Version_ID 作为一次性操作(或者不这样做并假设所有没有版本号的项目的隐式版本 0
)。
当您想要更新某个项目的 authorizedUsers
属性时,请先阅读该项目。然后用新数组创建一个 Update
操作,同时增加 Version_ID 属性。最后,添加一个 ConditionExpression
以检查 Version_ID
属性值仍然是您第一次读取该项目时的值,以确保在此期间另一个进程没有更新该项目。
如何使用 属性 值删除 dynamo 列表中的地图?
这是 dynamo 记录结构
{
"authorizedUsers": [
{
"name": "Bob",
"phoneNumber": "822-222-2221"
},
{
"name": "Joe",
"phoneNumber": "111-111-2221"
}
],
"PK": "users"
}
目前我有
var params = {
TableName: 'userTable',
Key: {
PK: 'users'
},
UpdateExpression: 'REMOVE authorizedUsers[0]',
ReturnValues: 'UPDATED_NEW'
};
try {
await docClient.update(params).promise();
} catch (e) {
throw new Error(e.message);
}
这会删除第一条记录没问题,但我需要表达式更加动态并且能够通过 phoneNumber(唯一标识符)删除行 我如何修改它以使用 phoneNumber 识别要删除的列表中的正确地图?
您不能使用 phoneNumber
来标识列表中的地图项。
您声明 phoneNumber
是唯一标识符。我建议将您的项目的模型更改为不使用数组,而是使用以 phoneNumber
作为键的映射。
{
"authorizedUsers": {
"822-222-2221": {
"name": "Bob",
"phoneNumber": "822-222-2221"
},
"111-111-2221": {
"name": "Joe",
"phoneNumber": "111-111-2221"
}
,
"PK": "users"
}
如果您无法更改项目的结构,请考虑对项目和 over-writing 整个 authorizedUsers
数组属性进行版本控制。您将希望在所有项目上创建一个 Version_ID 作为一次性操作(或者不这样做并假设所有没有版本号的项目的隐式版本 0
)。
当您想要更新某个项目的 authorizedUsers
属性时,请先阅读该项目。然后用新数组创建一个 Update
操作,同时增加 Version_ID 属性。最后,添加一个 ConditionExpression
以检查 Version_ID
属性值仍然是您第一次读取该项目时的值,以确保在此期间另一个进程没有更新该项目。