2016-07-12 17 views
2

Ich konnte eine große Menge von leeren Schlüsseln in einer MongoDB-Sammlung hinzufügen. Da in MongoDB keine leeren Schlüssel erlaubt sind, fällt es mir schwer, den Schlüssel mit normalen Methoden in MongoDB zu löschen. Gibt es einen Workaround für diese Art von Problemen mit Mongo Shell?Entfernen leeren Feldnamen aus Dokument

{ 
    "foo": "bar", 
    "": "I should not exist, I have no key..." 
} 
+0

Wie viele Felder haben Sie in jedem Dokument? – styvane

+0

Etwa 20 Felder in jedem Dokument – user1885523

Antwort

2

Wir können das leere Zeichenfolgenfeld mit Massenoperationen löschen.

Wir müssen über den Cursor-Snapshot iterieren und dann die Methodenmethode bulkWrite verwenden, um das Dokument in großen Mengen zu aktualisieren. Beachten Sie, dass wir das Dokument ersetzen müssen, weil wir das leere Feld nicht $unset oder umbenennen können. Ein Update-Vorgang ist hier also nicht möglich.

let requests = []; 
db.coll.find({ "": { "$exists": true } }).snapshot().forEach(document => { 
    delete document[""]; 
    requests.push({ 
     "replaceOne": { 
      "filter": { "_id": document._id }, 
      "replacement": document 
     } 
    }); 

    if (requests.length === 1000) { 
     // Execute per 1000 operations and re-init 
     db.coll.bulkWrite(requests); 
     requests = []; 
    } 
}); 

// Clean up queues 
if (requests.length > 0) { 
    db.coll.bulkWrite(requests); 
} 
+0

Das war Hackbeil! – user1885523

0

dieses Geben Sie ein Wurf ....

db.collection.find().forEach(function(doc) { 
    delete doc['']; 
    db.collection.save(doc); 
}); 

Es gibt einige Fähigkeiten Dokumente zu verwalten, die Fehler in ihnen, wie leere Schlüssel haben.

+0

Tun Sie das nicht !! Es ist schlecht für die Leistung. Sie sind viel bessere Möglichkeiten, das Feld zu "entschärfen". – styvane

+0

Bitte geben Sie eine bessere Lösung an. Vielen Dank. – arcee123

+0

Danke für die Idee. Dies löst einen Fehler in meiner MongoDB-Shell-Version aus: 3.2.5 E QUERY [thread1] SyntaxError: fehlt] nach Elementliste: – user1885523

Verwandte Themen