Lak*_*kar 17 amazon-web-services node.js amazon-dynamodb aws-lambda serverless-framework
我使用nodeJS sdk将项目放到dynamoDB,该项目是:
{
"eventId": date + '-' + eventName + '-' + eventPurpose,
"eventName": eventName,
"eventPurpose": eventPurpose,
"eventDates": eventDates,
"attendees": attendees
}
Run Code Online (Sandbox Code Playgroud)
将项目放入dynamoDB的当前代码:
const params = {
TableName: "event",
Item: {
"eventId": date + '-' + eventName + '-' + eventPurpose,
"eventName": eventName,
"eventPurpose": eventPurpose,
"eventDates": eventDates,
"attendees": attendees
},
ReturnValues: "ALL_OLD"
};
dynamo.put(params, (err, data) => {
console.log("coming here");
if (err) {
console.log("error : " + JSON.stringify(err));
}
console.log("data" + JSON.stringify(data));
cb(null, data);
});
Run Code Online (Sandbox Code Playgroud)
插入正确发生,返回值是一个空对象.
我想返回插入的项目.我找到了这个文档.但只有在更新旧值时才会返回.除了这个,我找不到任何其他有用的信息.
是否有任何解决方法或者我们只需要使用带有主键的get方法进行查询?
小智 12
只需传递params.Item回调:
dynamo.put(params, (err, data) => {
if (err) {
cb(err);
}
cb(null, params.Item);
});
Run Code Online (Sandbox Code Playgroud)
也通过err回调;)
小智 6
您可以使用UpdateItem代替PutItem. UpdateItem创建一个新的项目,如果不存在的话,再加上你可以设置ReturnValues到ALL_NEW,因为它出现在手术后的数据库返回整项:
const params = {
TableName: "event",
Key: {
"eventId": date + '-' + eventName + '-' + eventPurpose
},
UpdateExpression: "SET eventName = :eventName, eventPurpose = :eventPurpose, eventDates = :eventDates, attendees = :attendees",
ExpressionAttributeValues: {
":eventName": eventName,
":eventPurpose": eventPurpose,
":eventDates": eventDates,
":attendees": attendees
},
ReturnValues: "ALL_NEW"
};
Run Code Online (Sandbox Code Playgroud)
使用GetItem之后PutItem是不是一个好主意,除非你是在使用DynamodDB很强的一致性。如果你有最终的一致性(默认),那么GetItem在之后PutItem仍然可以返回空。
| 归档时间: |
|
| 查看次数: |
10259 次 |
| 最近记录: |