簡體   English   中英

如何在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);
  });

插入正確發生,返回值是一個空對象。

我想退回插入的項目。 我找到了這個文檔 但這僅在更新舊值的情況下返回。 除了這個,我找不到任何其他有用的信息。

是否有任何解決方法,或者我們只需要使用帶有主鍵的 get 方法進行查詢?

遺憾的是,您發布的鏈接是目前唯一真正的答案(API 版本 2012-08-10)。 PutItem可能會在更新之前返回項目或根本不返回項目。

ReturnValues參數由多個 DynamoDB 操作使用; 但是, PutItem不識別NONEALL_OLD以外的任何值。

簡而言之,檢索插入對象的唯一可靠方法是GetItem ,正如您所猜測的那樣。

只需在回調中傳遞params.Item

 dynamo.put(params, (err, data) => {
        if (err) {
          cb(err);
        }
        cb(null, params.Item);
      });

在回調中也傳遞err ;)

您可以使用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"
};

除非您在 DynamodDB 中使用強一致性,否則在PutItem之后PutItem使用GetItem不是一個好主意。 如果你有最終的一致性(默認),那么在PutItem之后的GetItem仍然可以返回空。

請注意,這是您要插入的項目,您已經有權訪問它:

{
    "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"
  };

您似乎對插入的內容感到困惑,因為您通過顯示您說要插入的對象來開始您的問題,但是您發布的代碼插入了一個稍微不同的對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM