2016-06-21 9 views
0

Ich muss durch eine primäre Tabelle durchlaufen und neue Dokumente zu einer anderen Tabelle mit id: und name: Einträge hinzufügen, die Dokumente in der primären Tabelle entsprechen.Iterative Befehle zu verschiedenen Tabellen mit forEach und/oder toArray

Ich habe die relevant documentation gelesen, die schändlich spärlich ist, und ich fand this SO post über das Iterieren über Objekteigenschaften innerhalb der gleichen Tabelle, aber dies gilt nicht, da ich über Objekte über eine Tabelle, nicht Eigenschaften in einem Objekt iterieren möchte und wenden die Ergebnisse in einer NEW-Tabelle (und nicht in derselben Tabelle) an.

Kann ich die Länge der Tabelle durchlaufen und Dokumente erstellen, die bestimmten Feldern in einer neuen Tabelle entsprechen?

Genauer gesagt: Die Dokumente in meinem DB primary_table haben Felder id: und name. Wie kann ich diese IDs und entsprechenden Namen in eine Tabelle migrieren, die payment_history unter Verwendung eines oder einer Kombination aus forEach, toArray und next Details?

Mein Versuch:

r.db('client').table('basic_info').forEach(
    function(id){ 
    return r.db('client')table('payment_history').insert(
     { 
     id: r.db('client').table('basic_info').get(id).getField('id'), 
     name: r.db('client').table('basic_info').get(id).getField('name') 
     } 
    ); 
    } 
); 

Vielen Dank im Voraus

Antwort

1

Sie konnten die forEach so schreiben:

r.db('client').table('basic_info').forEach(function(row) { 
    return r.db('client').table('payment_history').insert(
    {id: row('id'), name: row('name')});}) 

Aber es wäre wahrscheinlich besser, es so zu schreiben:

r.db('client').table('payment_history').insert(
    r.db('client').table('basic_info').pluck('id', 'name')) 
+0

Tha Nks ein Haufen! Ihr erster Vorschlag hat mir geholfen, die Funktionsweise von forEach zu verstehen. Eine Sache: Ihre Antwort fehlt ein Zitat! – Andrew

+0

Außerdem: Durchläuft die zweite Lösung alle IDs in der basic_info-Tabelle? – Andrew

+1

Art von. Was es tut, ist, dass es die Tabelle "basic_info" (als Lazy Stream) nimmt, jedes Dokument darin in nur die zwei Felder, die Sie wollen, ausschneidet und dann diesen Stream in "payment_history" einfügt. Es sollte besser als die 'forEach'-Version sein, da es die Stapelverarbeitung in den Einsätzen nutzen kann. – mlucy