2013-09-02 14 views
35

Sto provando a rimuovere una chiave da un documento RethinkDB. miei approcci (che non funziona):Come rimuovere una chiave da un documento RethinkDB?

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

altro approccio:

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

Questo imposta solo row.key = null (che sembra ragionevole).

Esempi testati su rethinkdb data explorer attraverso l'interfaccia utente web.

risposta

61

Ecco l'esempio rilevante dalla documentazione sul sito web di RethinkDB: http://rethinkdb.com/docs/cookbook/python/#removing-a-field-from-a-document

Per rimuovere un campo da tutti i documenti in una tabella, è necessario utilizzare replace per aggiornare il documento per non includere il campo desiderato (utilizzando without):

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

Per rimuovere il campo da un documento specifico nella tabella:

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

È possibile modificare la selezione dei documenti per aggiornare utilizzando uno dei selettori nelle API (http://rethinkdb.com/api/), ad esempio db, table, get, get_all, between, filter.

+3

Se stai cercando la versione javascript della ricetta: http://rethinkdb.com/docs/cookbook/javascript/#removing-a-field-from-a-document – neumino

+3

Come posso fare questo per campo nidificato di chiave? – Suvitruf

+7

@Suvitruf, è possibile utilizzare la sintassi del campo nidificato come segue: '.replace (r.row.without ({key1: {key2: true}}))' – BarthesSimpson

9

È possibile utilizzare replace con without:

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

Come posso fare questo per il campo nidificato di chiave? – Suvitruf

+2

Per i campi nidificati, è possibile utilizzare la sintassi del campo nidificato come segue: '.replace (r.row.without ({key1: {key2: true}}))' – BarthesSimpson

+0

commento impressionante, grazie! – pregmatch

1

Non è necessario utilizzare Sostituisci per aggiornare l'intero documento. Ecco la relativa documentazione: ReQL command: literal

Assumere il documento utente è simile al seguente:

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

e si desidera rimuovere l'età dalla proprietà dei dati. Normalmente, l'aggiornamento semplicemente unirà i tuoi nuovi dati con i vecchi dati. r.literal può essere usato per trattare l'oggetto dati come una singola 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" 
    } 
} 

o

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" 
    } 
} 
Problemi correlati