【问题标题】:Using batchWriteItem in dynamodb在 dynamodb 中使用 batchWriteItem
【发布时间】:2019-02-08 17:30:06
【问题描述】:

我的 dynamo db 中有两张表,一张是候选表,另一张是用户表,我想在 dynamo db 中使用 batchWriteItem 以便在表中添加数据。

我格式化的查询如下

var user = {
        userid: usrid,
        role: 'candidate',
        password: vucrypt.encryptpass(pass)
      };

      var canduser = {
        fname: req.body.fname,
        lname: req.body.lname,
        location: req.body.location,
        phone: req.body.phone,
        ccode: req.body.ccode,
        grad: req.body.grad,
        pgrad: req.body.pgrad,
        ograd: req.body.ograd,
        experience: exp,
        linkedin: req.body.linkedin,
        terms: tandc
      };
      canduser = vutools.fixcanduser(canduser);
      canduser.userid = usrid;

      var writes = {
        'users': [{put: user}],
        'candidate': [{put: canduser}],
      };

但如果我使用
dynamodb.batchWriteItem(writes, function(err, regdata) { }

它以错误告终。 如何编写正确的查询?我得到的错误是这样的。

MultipleValidationErrors: There were 3 validation errors:
* MissingRequiredParameter: Missing required key 'RequestItems' in params
* UnexpectedParameter: Unexpected key 'users' found in params
* UnexpectedParameter: Unexpected key 'candidate' found in params

【问题讨论】:

    标签: javascript node.js amazon-dynamodb aws-sdk-nodejs


    【解决方案1】:

    要在 DynamoDB 中批量写入,数据必须以 dynamodb 方式格式化。 如果您想在标准 json 中执行此操作,请使用 documentclient。 您在下面有一个示例,请记住 dynamobb batchwrite 仅按请求接受 25 个元素的 mawimum。

    所以根据doc你必须有:

    1.属性

    “ATTRIBUTE_1”:{“S”:“ATTRIBUTE_1_VALUE”}

    根据你的例子:

    “角色”:{“S”:“候选人”}

    2。项目

    每个项目都必须具有这种格式

          PutRequest: {
            Item: {
                ...,
                "ATTRIBUTE_1": { "S": "ATTRIBUTE_1_VALUE" },
                ...
            }
          }
    

    3.要添加的项目数组

    创建一个不超过 25 个元素的项目数组,(这是 batchwrite 的 dynamodb 限制)

    4.您的请求参数

    把它放在一起

    var params = {
      RequestItems: {
        "TABLE_NAME": [
            //the array you just created in step 3
         ]
       }
    }
    

    5.请求

    ddb.batchWriteItem(params, function(err, data) {
      if (err) {
        console.log("Error", err);
      } else {
        console.log("Success", data);
      }
    });
    

    更新

    你的例子是这样的:

    var params = {
      "RequestItems": {
        "TABLE_NAME": [
          {
            "PutRequest": {
              Item: {
                "userid": { "N": "usrid" },
                "role": { "S": 'candidate' },
                "password": { "S": vucrypt.encryptpass(pass) }
              }
            }
          }
        ],
        "TABLE_NAME2": [
          {
            "PutRequest": {
              Item: {
                "fname": {
                  "S": req.body.fname
                },
                "lname": {
                  "S": req.body.lname
                },
                "location": {
                  "S": req.body.location
                },
                "phone": {
                  "S": req.body.phone
                },
                "ccode": {
                  "S": req.body.ccode
                },
                "grad": {
                  "S": req.body.grad
                },
                "pgrad": {
                  "S": req.body.pgrad
                },
                "ograd": {
                  "S": req.body.ograd
                },
                "experience": {
                  "S": exp
                },
                "linkedin": {
                  "S": req.body.linkedin
                },
                "terms": {
                  "S": tandc
                }
              }
            }
          }
        ]
      }
    }
    

    【讨论】:

    • 上面的查询是对的(我写的)有表名,都不见了我不知道如何把这些放在上面的查询中你能帮我吗?
    • 你能根据我写的查询给我看一个例子吗?
    • @ArunVM 我添加了更新,但根据您的需要检查类型
    • Thease 是两张桌子'users': [{put: user}], 'candidate': [{put: canduser}], 答案是只有一张桌子这是我卡住的地方。
    【解决方案2】:

    这是正确的答案,但存在一些类型问题。

      var createuser = {
        "RequestItems": {
          "users": [{
               "PutRequest": {
                   Item: {
                        "userid": {
                            "S": usrid +""
                        },
                        "password": {
                            "S": vucrypt.encryptpass(pass) +""
                        },
                        "role": {
                          "S": 'candidate' +""
                        }
                    }
                 }
            }],
          "candidate": [{
               "PutRequest": {
                 Item: {
                      "ccode": {
                          "S": req.body.ccode +""
                      },
                      "fname": {
                          "S": req.body.fname +""
                      },
                      "lname": {
                          "S": req.body.lname +""
                      },
                      "pgrad": {
                          "S": req.body.pgrad +""
                      },
                      "videoresumeurl": {
                          "S": "-"
                      },
                      "phone": {
                          "S": req.body.phone +""
                      },
                      "terms": {
                          "S": tandc +""
                      },
                      "location": {
                          "S": req.body.location +""
                      },
                      "experience": {
                          "N": req.body.experience +""
                      },
                      "userid": {
                          "S": usrid +""
                      },
                      "grad": {
                          "S": req.body.grad +""
                      }
                   }
                 }
            }]
        }
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 2018-08-22
      • 1970-01-01
      相关资源
      最近更新 更多