2016-08-17 7 views
0

Ich begann gestern mit mongodb arbeiten. Ich habe zwei Sammlungen in der gleichen Datenbank mit 100 Millionen und 300 Millionen Dokumenten. Ich möchte Dokumente in einer Sammlung entfernen, wenn in einem Dokument der zweiten Sammlung kein Wert im Dokument gefunden wird. Um dies deutlicher zu machen, habe ich unten den Pseudocode-Code python/mongodb angegeben. Mir ist klar, dass das keine richtige Syntax ist, nur um die Logik zu zeigen, nach der ich suche. Ich suche für die effizienteste Art und Weise, wie es viele Aufzeichnungen und sein auf meinem Laptop :)Entfernen Sie Dokumente aus einer Sammlung basierend auf Wert in einer anderen Sammlung

for doc_ONE in db.collection_ONE: 
    if doc_ONE["arbitrary"] not in [doc_TWO["arbitrary"] for doc_TWO in db.collection_TWO]: 
     db.collection_ONE.remove({"arbitrary": doc_ONE["arbitrary"]}) 

Ich bin gut mit diesem, wenn schneller von der Mongo cli getan. Danke für das Lesen und bitte flame mich nicht zu hart lol.

+0

Hinweis: 'Dokument' erscheint zweimal in Ihrem Pseudocode, es ist verwirrend. Könntest du => 'doc_one' und' doc_two' umbenennen? –

Antwort

0

Wenn document["arbitrary"] ein immuable Wert ist, können Sie alle Werte speichern (ohne Duplikate) in einem set:

Werte = {document [ "willkürlich"] für Dokument in db.collection_TWO}

Die Prozess wie Sie vorschlagen:

for doc_one in db.collection_ONE: 
    if doc_one["arbitrary"] not in values: 
     db.collection_ONE.remove({"arbitrary": doc_one["arbitrary"]}) 
+0

Meinst du Werte wäre: Werte = (Dokument ["arbitrary"] für das Dokument in db.collection_TWO)? Collection_TWO enthält keine Duplikate für "arbitrary", nur collection_ONE. Dies ist etwas, was ich nur einmal tun muss, aber die Größe der Sammlungen zu tun, ich fürchte, meine Methode wird eine ganze Weile dauern. Ich war mir nicht sicher, ob es eine Art geheime Soße gab. Die Hauptsache ist, dass Dokumente in collection_ONE nur existieren sollten, wenn doc_ONE ["arbitrary"] in einem doc_TWO ["arbitrary"] existiert. Die Dokumente von collection_ONE hängen von den Informationen in sammlung_TWO ab. – Beetle

+0

Ja, 'values' ist ein [** set **] (https://docs.python.org/2/library/functions.html#funcset) oder [** frozsenset **] (https://docs.python.org/2/library/functions.html#func-frozenset) der vorhandenen 'document [" arbitrary "]' -Werte. Was für ein Wert ist das? "int"? 'str'? Ich bin über Python kann eine große Anzahl von "Int" oder "Str" im Speicher speichern ... –

+0

Ja, es ist eine großartige Methode, waaaay schneller als meine Liste Methode. Meine einzige Sorge ist das Gedächtnis. collection_TWO hat 300 Millionen Einträge. Es ist ein Zeichenfolgenwert von 40 Zeichen. – Beetle

Verwandte Themen