Seed your DynamoDB database easily
$ npm install --save dynamo-seeder
const seeder = require('dynamo-seeder');
const data = require('./fixtures/data.json');
seeder.connect({prefix: 'pridiktiv.test'});
seeder.seed(data)
.then(() => {
// The database is successfully seeded
})
.catch(err => {
// handle error
});
First of all, we should make sure the database is connected with the correct tables. It uses dynongo in the back.
After the database is connected, we can start seeding the data in the correct tables.
You can also provide extra options that will indicate the drop strategy. By default, tables are not dropped and the data that is seeded in that table is just added as new data. If you want to drop and create the table every time the seeder runs, you can add an extra option in the seed function.
By setting this option to true, it will drop the tables that are being seeded. If you have two tables for example, but only one table is seeded, only that table will be dropped and recreated.
seeder.seed(data, {dropTables: true})
.then(() => {
// The database is successfully seeded
})
.catch(err => {
// handle error
});
How does a json file looks like? Take a look at this simple example.
{
"users": {
"_schema": "path/to/UserSchema.json",
"foo": {
"firstName": "Foo",
"name": "Bar",
"email": "foo@bar.com"
}
}
}
Where the schema defines the DynamoDB createTable
definition. An example of the UserSchema.json
file could look like this.
{
"TableName": "User",
"AttributeDefinitions": [
{
"AttributeName": "email",
"AttributeType": "S"
}
],
"KeySchema": [
{
"AttributeName": "email",
"KeyType": "HASH"
}
],
"ProvisionedThroughput": {
"ReadCapacityUnits": 1,
"WriteCapacityUnits": 1
}
}
The path to the schema is relative from the path where the seeder calls the seed()
method. It will throw an error if
the schema could not be found.
Sometimes you will need something as an expression, for instance to set the birthday of the user.
{
"users": {
"_schema": "path/to/UserSchema.json",
"foo": {
"firstName": "Foo",
"name": "Bar",
"email": "foo@bar.com",
"birthday": "=new Date(1988, 08, 16).toISOString()"
}
}
}
Every statement that is preceded by an =
-sign will be parsed.
We can also bring it a step further and reference to the object itself. For instance, if we want to store the full name of the user aswell, instead of adding it manually, you can do something like this.
{
"users": {
"_schema": "path/to/UserSchema.json",
"foo": {
"firstName": "Foo",
"name": "Bar",
"fullName": "=this.firstName + ' ' + this.name",
"email": "foo@bar.com",
"birthday": "=new Date(1988, 08, 16).toISOString()"
}
}
}
The result of the fullName
expression will be Foo Bar
. So every evaluation is evaluated in it's own context.
What if we don't want to make use of the plain old Date
object, but instead use something like moment.
This is possible by adding a list of dependencies.
{
"_dependencies": {
"moment": "moment"
},
"users": {
"_schema": "path/to/UserSchema.json",
"foo": {
"firstName": "Foo",
"name": "Bar",
"email": "foo@bar.com",
"birthday": "=moment('1988-08-16').format()"
}
}
}
If you are using a dependency in your json file, be sure to install it as dependency in your project. If not,
it will stop the execution and return a MODULE_NOT_FOUND
error.
See dynongo.
Required
Type: object
The JSON seeding data.
Type: object
Extra options for the seeder. The only option for now is dropTables
. If set to true
, every table will be dropped
and recreated before it is reseeded again. This option is set to false
by default.
- mongoose-seeder - Seed your MongoDB database easily
MIT © Sam Verschueren