Wie deaktiviere ich alle Felder außer einem bekannten Satz von Feldern?

8

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?

    
Donuts 18.10.2013, 21:08
quelle

4 Antworten

0

Wenn Sie Atomarität nicht interessiert, dann können Sie es mit save tun:

%Vor%

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 :

zu speichern %Vor%

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.

    
Leonid Beschastny 18.10.2013, 22:16
quelle
1

Der beste Weg dies zu tun, besteht darin, über den Cursor zu iterieren und die $unset update entfernt diese Felder in Filialdokumenten mit Ausnahme der bekannten Felder, die Sie behalten möchten. Außerdem müssen Sie "Bulk" -Operationen für maximale Effizienz verwenden.

MongoDB 3.2 lehnt Bulk() und die zugehörigen Methoden ab. Also, wenn Sie die .bulkWrite()

verwenden sollten %Vor%

Von MongoDB 2.6 aus können Sie die Bulk API verwenden.

%Vor%     
styvane 15.03.2016 18:12
quelle
0

Ich habe das mit einer temporären Sammlung gelöst. Ich habe folgendes getan:

%Vor%     
Donuts 18.10.2013 21:30
quelle
0

hier ist meine Lösung, ich denke einfacher als die anderen, die ich lese:

%Vor%

Ich lösche alles außer den Feldern 'keep_field_1' und 'keep_field_2'

    
alv21 06.04.2016 14:50
quelle

Tags und Links