3

ここに例があります。Node.JS で AWS Lambda 関数を使用しています。これは DynamoDB のオブジェクトです。

{
    email: "johndoe@gmail.com",
    name: "John Doe",
    score: "12"
}

今、私は最初に彼の保存されたスコアが何であるかを確認したいと思います. 彼の現在のスコアが DB に既に存在するスコアよりも大きい場合は、DB を更新します。それ以外の場合はそのままにしておきます。現在、私のコードは毎回更新しています。どのように進めて、どの機能を使用すればよいかわかりません。

彼のスコアが 15 の場合、DB をチェックした後、次のように更新する必要があります。

{
    email: "johndoe@gmail.com",
    name: "John Doe",
    score: "15"
}

彼のスコアが 7 の場合、そのままにしておく必要があります。

{
    email: "johndoe@gmail.com",
    name: "John Doe",
    score: "12"
}

編集 - 次の問題も解決されました。回避策を見つけました。まだ答えを探しています。なので開けっ放し。

今私の問題は、レコードの更新と作成の両方に同じ関数を使用していることです。それは可能ですか?

新しいユーザーがゲームをプレイすると、彼の電子メール、名前、およびスコアが DB に保存されます。また、既存のユーザーがプレイした場合、スコアが DB のスコアよりも大きい場合は、そのスコアのみが更新されます。

これは私が現在立ち往生しているところです。これらの 2 つの問題を取得するには、1. name は予約済みのキーワードです。put を使用していたときに、どのようにして name を属性として使用できるようになったのだろうか。2. 電子メールはキーの一部であるため、更新できません。

これが私の現在のコードです。

function addToLeaderBoard(currentScore, email, name){
  var params = {
    TableName: tablename,
    Key: {
        "email": email
    },
    UpdateExpression: "set score = :num, name = :player, email = :mail",
    ConditionExpression: "score > :num",
    ExpressionAttributeValues: {
        ":num": currentScore,
        ":player": name,
        ":mail": email
    },
    ReturnValues: "UPDATED_NEW"
  };
  docClient.update(params, function(err, data) {
        if (err) console.log(err);
        else console.log(data);
    });
}
4

1 に答える 1