web-dev-qa-db-ja.com

挿入したアイテムを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);
  });

挿入は正しく行われ、戻り値は空の​​オブジェクトです。

挿入したアイテムを返品したいのですが。私はこれを見つけました doc 。しかし、これは古い値を更新する場合にのみ戻ります。これ以外に役立つ情報は見つかりませんでした。

回避策はありますか、それとも、主キーでgetメソッドを使用してクエリを実行するだけですか?

23

残念ながら、投稿したリンクは現時点で唯一の実際の回答です(APIバージョン2012-08-10)。 PutItem は、更新される直前のアイテムを返すか、まったく返さない場合があります。

ReturnValuesパラメーターは、いくつかのDynamoDB操作で使用されます。ただし、PutItemNONEまたはALL_OLD以外の値を認識しません。

要するに、挿入したオブジェクトを取得する唯一のreliable方法は GetItem です。 。

18
Diego Ferri

params.Itemコールバック:

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

errもコールバックに渡します;)

15
Sigma

これは挿入するアイテムであり、すでにアクセスできることに注意してください。

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

挿入しようとしているオブジェクトを表示することから質問を開始しますが、投稿したコードがわずかに異なるオブジェクトを挿入しているため、何を挿入するかについて混乱しているようです。

3
Mark B