RethinkDB: Insert Example

r.db('test')
 .table('users')
 .insert({
   'first_name': 'gary', 
   'last_name': 'sieling',
   'user_name': 'gsieling'
 })

By default, this returns you the IDs you requested:

{
  "deleted": 0 ,
  "errors": 0 ,
  "generated_keys": [
    "903e0943-8ffe-41ca-a22f-7b1a964b399d"
  ] ,
  "inserted": 1 ,
  "replaced": 0 ,
  "skipped": 0 ,
  "unchanged": 0
}

If you request the changes back, this will return you the values you inserted, in addition to the data inserted:

r.db('test')
 .table('users')
 .insert({
   'first_name': 'gary', 
   'last_name': 'sieling',
   'user_name': 'gsieling'
 }, {returnChanges: true})

This is what you get:

{
  "changes": [
    {
      "new_val": {
        "first_name":  "gary" ,
        "id":  "947a3ce6-d419-4d31-bd1e-874c721a9e6c" ,
        "last_name":  "sieling" ,
        "user_name":  "gsieling"
      } ,
      "old_val": null
    }
  ] ,
  "deleted": 0 ,
  "errors": 0 ,
  "generated_keys": [
    "947a3ce6-d419-4d31-bd1e-874c721a9e6c"
  ],
  "inserted": 1 ,
  "replaced": 0 ,
  "skipped": 0 ,
  "unchanged": 0
}

By default this sets durability to “hard” and doesn’t return the results, which should be a little faster. You can set durability to “soft” and it will insert a little faster, but risk losing data in a crash scenario:

r.db('test')
 .table('users')
 .insert({
   'first_name': 'gary', 
   'last_name': 'sieling',
   'user_name': 'gsieling'
 }, 
 {
    durability: 'soft'
 })

If instead of an insert, you want to replace an existing object, you can use ‘replace’:

r.db('test')
 .table('users')
  .get('1b223750-799d-402a-b378-74c993a9c10c')
  .replace(
    {
       user_name: 'test', 
       last_name: 'test', 
       first_name: 'test', 
       id: '1b223750-799d-402a-b378-74c993a9c10c'
    })