5

我使用的NodeJS SDK把項目dynamoDB,該項目是:如何返回插入的項目中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); 
    }); 

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

我想返回插入的項目。我發現這doc。但是,只有在更新舊值的情況下才會返回。除此之外,我找不到任何其他有用的信息。

有沒有什麼解決辦法,或者我們只需要用get方法查詢主鍵?

+0

請注意,在您的回調中,如果您收到「err」,您絕對不應該像調用成功一樣調用lambda'callback'。常規的「if/else」塊將有助於消除未來的混亂! –

回答

5

您發佈的鏈接是,不幸的是,此時的唯一真正的答案(API版本2012-08-10)。 PutItem可能會在更新之前返回項目,或者根本沒有。

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

總之,找回您插入的對象的唯一可靠方式是GetItem,就像你猜測。

2

注意,這是您要插入的項目,你已經可以訪問:

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

你似乎混淆了要插入的東西,因爲你通過展示你說你是插入對象開始你的問題,但您發佈的代碼插入一個略有不同的對象。

+0

你是對的。第一個代碼片段包含請求主體。不知何故,我感到困惑,並使其成爲對象。回答這個問題,你的解決方案是一個很好的解決方案,但通常在mongoDB中,它返回插入的對象,我認爲在dynamoDB中可能有類似的東西。 ** ReturnValues:只有在更新操作中才允許「ALL_NEW」**。只在**放**操作**無**或** ALL_OLD **。感謝你及時的答覆。我會照你所說的去做。簡單而優雅的方法。謝謝馬克! –

5

只需通過params.Item回調:

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

傳遞迴調太err;)

+0

你去過我的所有生活 – booky99

+0

是不是作弊? ...我的意思是我想要在數據庫中插入的真實數據,對吧? – MeBNoah

+0

種類。這取決於你想返回什麼:你想要在數據庫上存儲的對象或實際存儲的對象。 – Sigma