0

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?

jhamm
  • 20,088
  • 33
  • 96
  • 160
  • Update takes an object with a key. You are only passing an array. This has already been answered here https://stackoverflow.com/questions/30265313/rethinkdb-updating-nested-array – vbranden Dec 10 '17 at 20:48

1 Answers1

2

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

vbranden
  • 4,758
  • 1
  • 18
  • 12