我是DynamoDB的新手。我正在尝试组织我的数据库,使其如下所示:
{
userId : userID,
phoneMap :
[
{
name: Joe,
phone: +16712232312
},
{
name: Ron,
phone: +18972345126
}
]
}
我可以使用以下代码将数据添加到名为phoneMap
的列表中:
EntryService.prototype.update = function (userId, name, phone, cb) {
var phoneMapToAdd = {
name: name,
phone: phone
};
this.dynamodb.update({
TableName: "phoneMapTable",
Key: { "userId": userId },
UpdateExpression: "SET #phoneMap = list_append(#phoneMap, :entry)",
ExpressionAttributeNames: { "#phoneMap": "phoneMap" },
ExpressionAttributeValues: { ":entry": [phoneMapToAdd] },
}, cb);
};
但是,我无法更新现有条目或从地图中删除数据。以下代码也不检查重复项。有没有更好的方法呢?
答案 0 :(得分:0)
我做了一个解决方法。我搜索了很多,并意识到使用我的DynamoDB结构,我不能简单地更新任何联系人。我需要在列表中找到要更新的索引,然后将其删除,然后将更新后的联系人添加为新联系人。
EntryService.prototype.delete = function (userId, indx, cb) {
var params = {
TableName: "phoneMapTable",
Key: {
"userId": userId
},
UpdateExpression: "REMOVE phoneMap["+indx+"]",
ReturnValues: "UPDATED_NEW"
};
this.dynamodb.update(params, cb);
};
然后我将它添加到我已经存在的列表中,如
EntryService.prototype.append = function (userId, name, phone, cb) {
var phoneMapToAdd = {
name: name,
phone: phone
};
console.log(phoneMapToAdd);
this.dynamodb.update({
TableName: "phoneMapTable",
Key: { "userId": userId },
UpdateExpression: "SET #phoneMap = list_append(#phoneMap, :entry)",
ExpressionAttributeNames: { "#phoneMap": "phoneMap" },
ExpressionAttributeValues: { ":entry": [phoneMapToAdd] },
}, cb);
};
这是一种解决方法,但我找不到任何其他方法。