代码之家  ›  专栏  ›  技术社区  ›  Rilcon42

Dynamo表中的JS Upsert Map元素

  •  0
  • Rilcon42  · 技术社区  · 4 年前

    TL/DR公司: 如何在Dynamo中更新单个Map键/值而不修改整个Map?

    我在一张简单的桌子里放了张地图。我正在尝试实现一个更新,但是我不确定如何引用Map对象的键/值对。以下是我尝试的内容,以及我桌子的屏幕截图:

    enter image description here

    传入参数updq(更新问题)、updans(更新答案)、ans(原始答案)、qq(原始问题)

    var params = {
      TableName: TABLE_NAME,
      Key: { topic: topic },
      ExpressionAttributeNames: {
        "#qq": qq,
        "#updq": updq,
      },
      ExpressionAttributeValues: {
        ":ans": ans,
        ":updans": updans,
      },
    };
    if (!doUpdate) {
      //replace/create
      params["UpdateExpression"] = "SET questions.#qq = :ans"; //this works
    } else {
        params["UpdateExpression"] = "SET questions.#updq = :updq, _____"; //<<<<<<<<<<THIS DOESNT
    }
    
    console.log(`writing params: `, params);
    let res = await docClient.update(params).promise();
    
    0 回复  |  直到 4 年前
        1
  •  0
  •   Balu Vyamajala    4 年前

    问题地图已经存在,所以, SET questions.#qq = :ans 将在地图中创建一个条目

      params.ExpressionAttributeNames = {
        "#qq": qq,
      };
      params.ExpressionAttributeValues = {
        ":ans": ans,
      };
      params.UpdateExpression = "SET questions.#qq = :ans";
    

    REMOVE questions.#qq

      params.ExpressionAttributeNames = {
        "#qq": qq,
        "#updq": updq,
      };
      params.ExpressionAttributeValues = {
        ":updans": updans,
      };
      params.UpdateExpression =
        "REMOVE questions.#qq SET questions.#updq = :updans";
    }
    
    推荐文章