我知道我只能从原始数据类型创建“列表”,因此请将我的(使用AWS文档客户端的Node.js)代码视为伪代码。我的目标是将JSON 数组 附加到项目中,以便稍后可以从客户的记录中检索/更新/删除设备(和相应的数据)。我知道我可以使用Maps来做到这一点,但我是初学者,关于如何使用文档客户端进行操作的文档对我来说还不清楚。
这就是我想要做的事情:
var deviceData = {
'deviceID': deviceID,
'attributes': [
{'firmwareVersion': firmwareVersion},
{'productID': productID},
{'knickName': 'New Device'},
{'dateAdded': (new Date()).getTime()}
]
};
var newCustomerData = {
TableName: process.env.customerMasterFile,
Key: {
'email': email
},
ReturnValues: 'UPDATED_NEW',
UpdateExpression: 'ADD #device :device SET #customerEmailDomain = :customerEmailDomain, #friendlyName = :friendlyName, #created = :created, #updated = :updated',
ExpressionAttributeNames: {
'#device': 'deviceList',
'#customerEmailDomain': 'customerEmaiDomain',
'#friendlyName': 'friendlyName',
'#created': 'createAccountTime',
'#updated': 'updateAccountTime',
},
ExpressionAttributeValues: {
':device': docClient.createSet([deviceData]), // I know this is incorrect...
':customerEmailDomain': customerEmailDomain,
':friendlyName': friendlyName,
':created': (new Date()).getTime(),
':updated': (new Date()).getTime()
}
};
docClient.update(newCustomerData, function(err, data) {
if (err) console.log(err);
else console.log(data);
});
答案 0 :(得分:2)
通常,JSON数据将在DynamoDB上保持为Map。如果在DynamoDB上存储JSON数组,它将在DynamoDB上存储为“List of Map”数据类型,这将使得在不知道List数据类型的索引的情况下更新,删除,检索变得困难(即设备)。如果您需要在不知道列表索引(即数组索引)的情况下完成更新/删除,建议不要使用“Map of Map”。
1)更改为包括设备
在内的所有属性的SET将单个JSON对象存储为Map,允许在不知道数组索引的情况下更新/删除: -
var params = {
TableName: process.env.customerMasterFile,
Key: {
'email': email
},
ReturnValues: 'UPDATED_NEW',
UpdateExpression: 'SET #device = :device, #customerEmailDomain = :customerEmailDomain ,#friendlyName = :friendlyName, #created = :created, #updated = :updated',
ExpressionAttributeNames: {
'#device': 'deviceList',
'#customerEmailDomain': 'customerEmaiDomain',
'#friendlyName': 'friendlyName',
'#created': 'createAccountTime',
'#updated': 'updateAccountTime',
},
ExpressionAttributeValues: {
':device': deviceData,
':customerEmailDomain': customerEmailDomain,
':friendlyName': friendlyName,
':created': (new Date()).getTime(),
':updated': (new Date()).getTime()
}
};
样本设备为地图: -
替代方法: -
device id
作为表格的排序键email
和device id
构成DynamoDB上项目的唯一组合