Использование batchWriteItem в Dynamodb

1

У меня две таблицы в моем динамо-db, одна из них - таблица кандидатов, а другая - таблица пользователей. Я хочу использовать batchWriteItem в dynamo db, чтобы добавить данные в таблицу.

Запрос, который я форматировал, выглядит следующим образом

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
Теги:
amazon-dynamodb
aws-sdk-nodejs

2 ответа

0
Лучший ответ

Это правильный ответ, есть некоторые проблемы типа.

  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 +""
                  }
               }
             }
        }]
    }
  }
1

Чтобы выполнить запись в DynamoDB, данные должны быть сформированы способом dynamodb. у вас есть пример ниже, имейте в виду, что dynamobb batchwrite принимает только малимум из 25 элементов по запросу.

поэтому, согласно документу, вы должны:

1. Атрибуты

"ATTRIBUTE_1": {"S": "ATTRIBUTE_1_VALUE"}

Согласно вашему примеру:

"роль": {"S": "кандидат"}

2. Предметы

Каждый элемент должен иметь этот формат

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

3. Массив элементов для добавления

Создайте массив элементов, который не превышает 25 элементов (это ограничение dynamodb для batchwrite)

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
            }
          }
        }
      }
    ]
  }
}
  • 0
    Вышеприведенный запрос верен (который я написал). Есть имя таблицы и все пропущено. Я не знаю, как поместить их в приведенный выше запрос. Можете ли вы помочь мне с этим?
  • 0
    Это то, что я ищу markomedia.com.au/dynamodb-for-javascript-cheatsheet
Показать ещё 11 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню