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

使用DynamoDB向列表项添加数字

  •  0
  • Cris69  · 技术社区  · 6 年前

    这是我正在研究的DynamoDB表结构:

    {
      "userId": "99999999-9999-9999-9999-999999999999",
      "userProfile": {
        "email": "myemail@gmail.com",
        "firstName": "1234124",
        "lastName": "123423",
      },
      "masterCards": [  
        {
          "cardId": 101000000000001,
          "cardImage": "logo.png",
          "cardName": "VipCard1",
          "cardWallet": "0xFDB17d12057b6Fe8c8c425D2DB88d8475674567"
        },
        {
          "cardId": 102000000000002,
          "cardImage": "logo.png",
          "cardName": "VipCard2",
          "cardWallet": "0xFDB17d12057b6Fe8c8c425D2DB88d8183454345"
        },
        {
          "cardId": 103000000000003,
          "cardImage": "logo.png",
          "cardName": "VipCard3",
          "cardWallet": "0xFDB17d12057b6Fe8c8c425D2DB88d8184345345"
        }
      ],
    
    }
    

    我在努力提高效率 cardId 使用此Lambda函数的第一个列表项的字段:

    const dynamoDB = new AWS.DynamoDB({region: 'eu-central-1', apiVersion:'2012-08-10'});
    const counterId="99999999-9999-9999-9999-999999999999"
    
            const params = {
                    TableName:"FidelityCardsUsers",
                    Key: {"userId":{"S":counterId}},
                    UpdateExpression:"ADD #masterCards[0].#cardId :increment",
                    ExpressionAttributeNames:{
                        "#masterCards": "masterCards",
                        "#cardId": "cardId"
                    },
                    ExpressionAttributeValues:{":increment": {"N": "1"}}
                }
    
            dynamoDB.updateItem(params, function(err, data) {
    
                            if (err) {
                                console.log('error getting counter from DynamDB: ',err)
                                callback(err);
                            } else {
                                callback(null,data)
    
                              }
    
      })  
    

    "mastercards[0].cardId[0]" 数值设为1。

    2 回复  |  直到 6 年前
        1
  •  0
  •   IftekharDani    6 年前

    AWS.DynamoDB.DocumentClient()

    例子:

    var docClient=new AWS.DynamoDB.DocumentClient();

    let params = {
      TableName:'tableName',
      Key: {
        'venueId': 'VENUE_002'
      },
      UpdateExpression: "ADD #walk.#coordinates[0] :increment",
      ExpressionAttributeNames: {
        '#walk': 'walk',
        '#coordinates': 'coordinates'
      },
      ExpressionAttributeValues: {
        ':increment': 1 // This is from the client
      },
      ReturnValues: 'UPDATED_NEW'
    };
    docClient.update(params, function (err, data) {
      if (err) {
        console.log('failure:updateShuttleDirection:failed');
        console.log(err);
      } else {
        console.log('success:updateShuttleDirection:complete');
        console.log(data);
      }
    });
    

    样本数据:

    "walk": {
          "coordinates": [
           10,
           20
          ],
          "type": "Point"
        },
    

    我试着从10增加到11,效果很好

        2
  •  0
  •   Cris69    6 年前

    看医生 here ,似乎:

    添加操作只能用于顶级属性,不能嵌套 属性。