Angenommen, ich habe ein einzelnes Dokument in meiner Mongo-Sammlung, das wie folgt aussieht:
%Vor%Ich möchte das Dokument wie folgt ausschneiden:
%Vor%Mein Problem ist jedoch, dass ich nicht weiß, was die "zufälligen" Feldnamen sind. Wie würde ich in Mongo alle Felder außer einigen bekannten Feldern aufheben?
Ich kann mir ein paar Wege vorstellen, aber ich kenne die Syntax nicht. Ich könnte alle Feldnamen auswählen und dann für jedes Feld das Feld unscharf stellen. so ähnlich:
%Vor%Eine andere Methode, die ich mir vorgenommen habe, war, den Namen des Felds nicht in einem String-Array zu definieren, das ich definiert habe. nicht sicher, wie man das auch macht. Irgendwelche Ideen?
Wenn Sie Atomarität nicht interessiert, dann können Sie es mit save
tun:
Das Hauptproblem dieser Lösung ist, dass sie nicht atomar ist. Daher wird jede Aktualisierung von doc
zwischen findOne
und save
verloren gehen.
Alternativ ist es möglich, unset
aller unerwünschten Felder anstelle von doc
:
Diese Lösung ist viel besser, weil mongo update
atomisch ausführt, so dass keine Aktualisierung verloren geht. Und Sie brauchen keine andere Sammlung, um zu tun, was Sie wollen.
Der beste Weg dies zu tun, besteht darin, über den Cursor zu iterieren und die $unset
MongoDB 3.2 lehnt Bulk()
und die zugehörigen Methoden ab. Also, wenn Sie die .bulkWrite()
Von MongoDB 2.6 aus können Sie die Bulk
API verwenden.
Tags und Links mongodb mongodb-query