2016-07-14 7 views
1

Ich schreibe eine Bereinigungsfunktion, die alle ungültigen Dokumente aus der Sammlung löschen wird. Dafür habe ich eine Idee, ungültige _id -Werte in eine Array-Variable zu schieben und mit $ in zu löschen.mongodb Push-Werte in Array-Variable

Nachdem ich alle Werte auf Fehler Array, habe ich ein Skript, um passende Dokumente zu löschen. Es fehlt jedoch etwas mit dem Code, der bei n.toArray() einen Fehler auslöst.
Kann mir jemand helfen, den Code zu korrigieren?

+0

Was ist das 'Kriterium' hier, um die ungültigen Dokumente zu finden? –

+0

Wie in der Problembeschreibung erwähnt, müssen die ungültigen Dokumente gelöscht werden. –

+0

Nicht klar, was ein ungültiges Dokument ist. Wenn Sie es erklären, kann Ihnen jemand helfen, es in einem Kriterium zu tun. –

Antwort

1
function(scan) { 
    var doc; 
    var nKeys; 
    var err = []; 

    for(var n = 1; n < scan; ++ n) { 
     doc = db.zeroDimFacts.findOne({_id: n}) 
     nKeys = 0; 

     for(k in doc) { 
      ++ nKeys; 
     } 
     if(nKeys < 5) { 
      err.push(n); 
     } 
    } 
    return err; 
}; 

Achten Sie auf den Aufruf findOne(). Wenn es null zurückgibt, wird n in das Array gelangen, was mir unerwünscht erscheint.

1

Sie können findByIdAndRemove({criteria}) verwenden und je nach Rückgabewert können Sie die Logik haben.

+0

Hi, ich arbeite nicht an Mungo, ich schreibe eine Funktion in mongodb. –

+0

Wird findOneAndDelete Hilfe: https://docs.mongodb.com/manual/reference/method/db.collection.findOneAndDelete/ – npr

+0

Ich bin mir nicht sicher, kann es im allgemeinen Szenario helfen, weil es das Dokument validiert und löscht sehr erfolgreiche Iteration, würde es eine längere Zeit für eine Sammlung mit Millionen von Dokumenten dauern. Dies ist der Grund, warum ich mich entschieden habe, zuerst alle IDs von ungültigen Dokumenten zu sammeln und dann einzugeben, um sie auf einmal zu löschen. –