rethinkdbrethinkdb-javascript

Why can't I append an object to an array in rethinkdb?


I am trying to append an object into an array in rethink. Here is how I am trying to append it:

rethink.table('shifts')
        .get(shiftId)
        .update(row => row("milestones").default([]).append({
            dateAchieved: "2017-01-01",
            phaseType: "TEST"
        })).run(rethinkConnection)

The error I get is this:

first_error: 'Inserted value must be an OBJECT (got ARRAY):\n[\n\t{\n\t\t"dateAchieved":\t"2017-01-01",\n\t\t"phaseType":\t"TEST"\n\t}\n]',

I also tried the same code about, but removed .default([]), which did not change anything.

I have tried logging out what row('milestones') is and this is the result:

var_15("milestone")

I was expecting to see an array. What else is necessary to add an object to an array? How do I make this work?


Solution

  • You need to update document with a document not an array. Your reql should look like this

    rethink.table('shifts')
      .get(shiftId)
      .update({
        milestones: rethink.row('milestones').append({
          dateAchieved: "2017-01-01",
          phaseType: "TEST"
        })
      })
      .run(rethinkConnection)
    

    this is because the .append command does not commit data to the database it only returns an in memory modified array