如何return dynamoDB中插入的项目
How to return the inserted item in dynamoDB
我正在使用 nodeJS sdk 将项目放入 dynamoDB,项目是:
{
"eventId": date + '-' + eventName + '-' + eventPurpose,
"eventName": eventName,
"eventPurpose": eventPurpose,
"eventDates": eventDates,
"attendees": attendees
}
当前将项目放入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);
});
插入正确,return 值为空对象。
我想return插入的项目。我找到了这个 doc。但这 returns 仅在更新旧值的情况下。除了这个,我找不到任何其他有用的信息。
是否有任何解决方法,或者我们只需要 使用带主键的 get 方法进行查询?
请注意,这是您要插入的项目,您已经可以访问该项目:
{
"eventId": date + '-' + eventName + '-' + eventPurpose,
"eventName": eventName,
"eventPurpose": eventPurpose,
"eventDates": eventDates,
"attendees": attendees
}
您只需将您的代码更改为这样,然后您就会在 item
变量中插入项目:
var item = {
"eventId": date + '-' + eventName + '-' + eventPurpose,
"eventName": eventName,
"eventPurpose": eventPurpose,
"eventDates": eventDates,
"attendees": attendees
};
const params = {
TableName: "event",
Item: item,
ReturnValues: "ALL_OLD"
};
您似乎对插入的内容感到困惑,因为您通过显示您说要插入的对象来开始提问,但您发布的代码插入的对象略有不同。
只需在回调中传递 params.Item
:
dynamo.put(params, (err, data) => {
if (err) {
cb(err);
}
cb(null, params.Item);
});
也在回调中传递 err
;)
遗憾的是,您发布的 link 是目前唯一真正的答案(API 版本 2012-08-10)。 PutItem
可能 return 项在更新之前或根本 none 项。
The ReturnValues
parameter is used by several DynamoDB operations; however, PutItem
does not recognize any values other than NONE
or ALL_OLD
.
简而言之,正如您推测的那样,唯一可靠检索插入对象的方法是GetItem
。
您可以使用 UpdateItem
而不是 PutItem
。 UpdateItem
创建一个新项目,如果它不存在的话,另外你可以设置 ReturnValues
到 ALL_NEW
到 return 整个项目,因为它在操作后出现在数据库中:
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"
};
在 PutItem
之后立即使用 GetItem
不是一个好主意,除非您在 DynamodDB 中使用强一致性。如果你有最终一致性(默认)那么 GetItem
在 PutItem
之后仍然可以 return 为空。
我正在使用 nodeJS sdk 将项目放入 dynamoDB,项目是:
{
"eventId": date + '-' + eventName + '-' + eventPurpose,
"eventName": eventName,
"eventPurpose": eventPurpose,
"eventDates": eventDates,
"attendees": attendees
}
当前将项目放入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);
});
插入正确,return 值为空对象。
我想return插入的项目。我找到了这个 doc。但这 returns 仅在更新旧值的情况下。除了这个,我找不到任何其他有用的信息。
是否有任何解决方法,或者我们只需要 使用带主键的 get 方法进行查询?
请注意,这是您要插入的项目,您已经可以访问该项目:
{
"eventId": date + '-' + eventName + '-' + eventPurpose,
"eventName": eventName,
"eventPurpose": eventPurpose,
"eventDates": eventDates,
"attendees": attendees
}
您只需将您的代码更改为这样,然后您就会在 item
变量中插入项目:
var item = {
"eventId": date + '-' + eventName + '-' + eventPurpose,
"eventName": eventName,
"eventPurpose": eventPurpose,
"eventDates": eventDates,
"attendees": attendees
};
const params = {
TableName: "event",
Item: item,
ReturnValues: "ALL_OLD"
};
您似乎对插入的内容感到困惑,因为您通过显示您说要插入的对象来开始提问,但您发布的代码插入的对象略有不同。
只需在回调中传递 params.Item
:
dynamo.put(params, (err, data) => {
if (err) {
cb(err);
}
cb(null, params.Item);
});
也在回调中传递 err
;)
遗憾的是,您发布的 link 是目前唯一真正的答案(API 版本 2012-08-10)。 PutItem
可能 return 项在更新之前或根本 none 项。
The
ReturnValues
parameter is used by several DynamoDB operations; however,PutItem
does not recognize any values other thanNONE
orALL_OLD
.
简而言之,正如您推测的那样,唯一可靠检索插入对象的方法是GetItem
。
您可以使用 UpdateItem
而不是 PutItem
。 UpdateItem
创建一个新项目,如果它不存在的话,另外你可以设置 ReturnValues
到 ALL_NEW
到 return 整个项目,因为它在操作后出现在数据库中:
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"
};
在 PutItem
之后立即使用 GetItem
不是一个好主意,除非您在 DynamodDB 中使用强一致性。如果你有最终一致性(默认)那么 GetItem
在 PutItem
之后仍然可以 return 为空。