Entfernen von Leerzeichen (führende und nachgestellte) von string-Wert
Habe ich importiert eine csv-Datei in mongo mit mongoimport und ich möchten, entfernen Sie führende und nachfolgende Leerzeichen aus meinen string-Wert.
Ist es möglich, direkt in mongo verwenden eine trim-Funktion für die gesamte Kollektion oder muss ich ein Skript schreiben, dass für?
Meine Sammlung enthält Elemente wie:
{
"_id" : ObjectId("53857680f7b2eb611e843a32"),
"category" : "Financial & Legal Services "
}
Ich möchte die trim-Funktion für die ganze Sammlung, so dass "category"
enthält keine führenden und nachfolgenden Leerzeichen.
- Wenn Sie können, beheben Sie die CSV vor dem import.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es derzeit nicht möglich, ein update in MongoDB zu finden, um den vorhandenen Wert des aktuellen Feldes, wenn Sie das update anwenden. So sind Sie gehen zu müssen, um eine Schleife:
In Anbetracht der Nutzung der
$Satz
operator gibt es und der prognostizierten "Kategorie" - Feld nur, um den Netzwerkverkehr zu verringern"Könnte man eingrenzen, dass die Prozesse mit einem
$regex
zu entsprechen:Oder auch als Reine
$regex
ohne den Einsatz von$und
, die brauchen Sie nur in MongoDB, wo mehrere Bedingungen angewendet werden würden, um das gleiche Feld. Ansonsten$und
ist implizit alle Argumente:Beschränkt den übereinstimmenden Dokumente zu verarbeiten, um nur diejenigen, die führende oder nachfolgende Leerzeichen.
Wenn Sie sind besorgt über die Anzahl der Dokumente zu sehen, bulk-Update sollte helfen, wenn Sie MongoDB 2.6 oder höher zur Verfügung:
Oder sogar mit der bulk operations-API für MongoDB 2.6 und höher:
Besten getan mit
bulkWrite()
für moderne API, die verwendet den Bulk-Operationen ( API technisch alles jetzt tut ), aber eigentlich in einer Weise, die sicher regressive mit älteren Versionen von MongoDB. Obwohl in aller Ehrlichkeit, würde bedeuten, vor MongoDB 2.6, und Sie wäre auch aus der Berichterstattung für offiziellen support-Optionen über solch eine version. Die Codierung ist etwas Reiniger für diese:Dem alle nur senden, Operationen auf dem server einmal pro 1000 Dokumente, oder so viele änderungen, wie Sie können passen unter die 64MB BSON-Grenze.
Als nur ein paar Möglichkeiten, dieses problem anzugehen. Oder aktualisieren Sie Ihre CSV-Datei zuerst, bevor Sie den Import.
Kleine Korrektur zur Antwort von Neil für bulk-Operationen api
ist es
nicht
auch Sie verpasste
innerhalb der forEach-Schleife, so in der Zusammenfassung
Hinweis: ich habe nicht genug Ruf zu kommentieren, daher hinzufügen eine Antwort
Können Sie javascript-Code ausführen in einer MongoDB update ausführen, wenn es in einem cursor-Methode:
Wenn Sie haben eine Tonne der Datensätze und die Notwendigkeit, batch-Prozess, möchten Sie vielleicht einen Blick auf die anderen Antworten hier.
Ab
Mongo 4.2
,db.Sammlung.update()
können akzeptieren eine aggregation pipeline, schließlich ermöglicht das update eines Feldes basierend auf eigenen Wert.Ab
Mongo 4.0
, die$trim
operator kann angewendet werden auf einem string zu entfernen, seine führende/nachfolgende Leerzeichen:Beachten Sie, dass:
Den ersten Teil
{}
ist das Spiel-Abfrage, Filterung, welche Dokumente zu aktualisieren (in diesem Fall alle Dokumente).Den zweiten Teil
[{ $set: { category: { $trim: { input: "$category" } } } }]
ist das update aggregation pipeline (beachten Sie die eckigen Klammern bedeuten, die Verwendung einer aggregation pipeline):$Satz
ist eine neue aggregation operator, die in diesem Fall ersetzt der Wert für"category"
.$trim
wir ändern und trimmen Sie den Wert für"category"
.$trim
können einen optionalen parameterchars
die es erlaubt, die angibt, welche Zeichen zu trimmen.Vergessen Sie nicht
{ multi: true }
, andernfalls wird nur das erste übereinstimmende Dokument aktualisiert werden.