2016-06-09 17 views
0

Gibt es eine effiziente Möglichkeit, forEach in mongodb mit PHP zu verwenden. Das Problem besteht darin, in der Lage zu sein, für jedes Element im Ergebnisarray eine neue Zeile in die CSV-Datei einzufügen. Die eine der möglichen LösungforEach mongodb PHP

$ Daten zu verwenden, war die Mongo Cursor

$records = iterator_to_array($data); 
    $file = fopen("contacts.csv","w"); 
    foreach ($records as $record){    
     fputcsv($file,$record); 
    } 

Aber die gesamten Daten in dem Speicher geladen wird, nicht eine skalierbare Option für mein Problem, da die Daten sehr groß sein können. Gibt es eine bessere Alternative, die forEach verwenden kann? Wie forEach mit mongo PHP

+0

Wenn '$ data' ein Objekt ist, das die' Iterator'-Schnittstelle implementiert, können Sie 'foreach' direkt auf' $ data' verwenden. Sie müssen es nicht in ein einfaches Array konvertieren. http://php.net/manual/en/class.iterator.php –

+0

Müssen die forEach innerhalb der Mongo db verwenden –

+0

Ich verstehe '$ data' ist der Mongodb-Cursor. Sie können einfach 'foreach ($ data as $ record)' ausführen, um darüber zu iterieren. Es muss zu diesem Zeitpunkt kein Array sein, aber Sie können 'iterator_to_array ($ record)' innerhalb der Schleife aufrufen, um mit 'fputcsv()' zu verwenden und es zu vermeiden, alles in den Speicher zu laden. –

Antwort

0
$file = fopen("contacts.csv","w"); 
foreach ($data as $record){    
    $contact = iterator_to_array($record);  
    fputcsv($file,$contact); 
} 

Diese Lösung funktioniert als $ Daten zu verwenden, bleibt Cursor und iterator_to_array() innerhalb Schleife wandelt einzelnen Datensatz in Array in CSV-Datei abgelegt werden.