Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to remove a key from a RethinkDB document?

I'm trying to remove a key from a RethinkDB document. My approaches (which didn't work):

r.db('db').table('user').replace(function(row){delete row["key"]; return row}) 

Other approach:

r.db('db').table('user').update({key: null}) 

This one just sets row.key = null (which looks reasonable).

Examples tested on rethinkdb data explorer through web UI.

like image 614
Robert Zaremba Avatar asked Sep 02 '13 20:09

Robert Zaremba


3 Answers

Here's the relevant example from the documentation on RethinkDB's website: http://rethinkdb.com/docs/cookbook/python/#removing-a-field-from-a-document

To remove a field from all documents in a table, you need to use replace to update the document to not include the desired field (using without):

r.db('db').table('user').replace(r.row.without('key'))

To remove the field from one specific document in the table:

r.db('db').table('user').get('id').replace(r.row.without('key'))

You can change the selection of documents to update by using any of the selectors in the API (http://rethinkdb.com/api/), e.g. db, table, get, get_all, between, filter.

like image 177
Michael Glukhovsky Avatar answered Nov 19 '22 21:11

Michael Glukhovsky


You can use replace with without:

r.db('db').table('user').replace(r.row.without('key'))
like image 12
Etienne Laurin Avatar answered Nov 19 '22 22:11

Etienne Laurin


You do not need to use replace to update the entire document. Here is the relevant documentation: ReQL command: literal

Assume your user document looks like this:

{
  "id": 1,
  "name": "Alice",
  "data": {
    "age": 19,
    "city": "Dallas",
    "job": "Engineer"
  }
}

And you want to remove age from the data property. Normally, update will just merge your new data with the old data. r.literal can be used to treat the data object as a single unit.

r.table('users').get(1).update({ data: r.literal({ age: 19, job: 'Engineer' }) }).run(conn, callback)

// Result passed to callback
{
  "id": 1,
  "name": "Alice",
  "data": {
    "age": 19,
    "job": "Engineer"
  }
}

or

r.table('users').get(1).update({ data: { city: r.literal() } }).run(conn, callback)

// Result passed to callback
{
  "id": 1,
  "name": "Alice",
  "data": {
    "age": 19,
    "job": "Engineer"
  }
}
like image 5
Doug Coburn Avatar answered Nov 19 '22 22:11

Doug Coburn