2

ich diese Antwort gefunden - Answer linkSpeicher eine Teilmenge von MongoDB (3.0) Sammlung in einer anderen Sammlung in Python

db.full_set.aggregate([ { $match: { date: "20120105" } }, { $out: "subset" } ]); 

ich gleiche tun will, aber mit ersten 15.000 Dokumenten in der Sammlung, konnte ich nicht finden, wie man gelten Grenze für solche Abfrage (ich habe versucht $limit : 15000 verwenden, aber es nicht erkennt $ limit)

auch, als ich versuchte -

db.subset.insert(db.full_set.find({}).limit(15000).toArray()) 

gibt es keine Funkt Ion toArray() für Ausgangstyp cursor.

Hilf mir, wie kann ich es erreichen?

+1

Haben Sie versucht, 'db.full_set.aggregate ([{$ match: {date: "20120105"}}, {$ limit: 15000}, {$ out: "subset"}]); '? – chridam

+0

Ich führe dies in Jupyter Notizbuch, es sagt "$" ist keine gültige Syntax. – Darpan

Antwort

0

Nun,
in Python, das ist, wie die Dinge funktionieren - $limit in "" gewickelt werden muss,
und Sie benötigen eine Pipeline erstellen es als Befehl auszuführen.

In meinem Code -

pipeline = [{ '$limit': 15000 },{'$out': "destination_collection"}] 
    db.command('aggregate', "source_collection", pipeline=pipeline) 

Sie müssen alles in doppelte Anführungszeichen wickeln, Ihre Quell- und Zielsammlung einschließlich. Und in db.command db ist das Objekt Ihrer Datenbank (dh dbclient.database_name)

Per dieser Antwort -

Es funktioniert ungefähr 100-mal schneller als forEach zumindest in meinem Fall. Dies liegt daran, dass die gesamte Aggregationspipeline im mongod-Prozess ausgeführt wird, während eine Lösung, die auf find() und insert() basiert, alle Dokumente vom Server zum Client und zurück senden muss. Dies hat eine Leistungseinbuße zur Folge, selbst wenn der Server und der Client sich auf demselben Rechner befinden.

Die eine, die wirklich mich diese Antwort Figur geholfen - Reference 1
Und official documentation

Verwandte Themen