2013-12-16 10 views
7

utilizzare RethinkDB nel mio progetto e avere la seguente struttura della tabella:RethinkDB: rimozione elemento da matrice in una tabella per valore da un'altra tabella

data_item { 
    id: "generated_thing", 
    slug: "slug" 
} 

aggregation_of_data_items { 
    items: ["some", "ids", "from", "data_item", "table"] 
} 

Quando ho Cancellare dal tavolo contenuti voglio mantenere dati coerenti - elimina l'ID dall'array aggregation_of_data_items.items: c'è qualche possibilità di farlo in una richiesta (qualcosa come $ pull o $ pullAll in MongoDB)?

risposta

5

Per eliminare un elemento da una matrice è possibile effettuare le seguenti operazioni (questo è in Python ma funziona in qualsiasi lingua supportata):

def remove(doc, value): 
    doc.replace(
    lambda doc: doc.merge({"items" : doc["items"].set_difference([value])})) 

Ora abbiamo solo bisogno di eseguire una query che fa entrambe le cose, il Il modo più semplice per farlo è inserirli in un array:

[r.table("data_item").get(id).delete(), 
remove(r.table("aggregation_of_..").get(...), id)] 
.run() 
Problemi correlati