In MongoDB ist das $trim
Der Aggregations-Pipeline-Operator entfernt Leerzeichen am Anfang und am Ende einer Zeichenfolge. Dies schließt das Nullzeichen ein.
Es kann auch jedes angegebene Zeichen entfernen. Beispielsweise könnten Sie damit alle Bindestriche entfernen (-
) oder Punkte (.
) oder alle s
Zeichen usw.
Beispiel
Angenommen, wir haben eine Sammlung namens pets
mit folgendem Dokument:
{ "_id" : 1, "name" : "Wagg", "type" : " Dog ", "weight" : 20 }
Wir können sehen, dass der type
Das Feld enthält Leerzeichen auf beiden Seiten des Wortes Dog
. Wir können den $trim
verwenden -Operator, um dieses Feld mit entferntem Leerzeichen zurückzugeben.
Beispiel:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $trim: { input: "$type" } }
}
}
])
Ergebnis:
{ "_id" : 1, "name" : "Wagg", "type" : "Dog" }
Wie erwartet, der type
Feld wurde ohne Leerzeichen zurückgegeben.
Sie können auch $ltrim
verwenden -Operator zum Abschneiden des linken Teils der Zeichenfolge und $rtrim
Operator, um die rechte Seite der Zeichenfolge zu kürzen.
Es gibt tatsächlich einige Zeichen, die MongoDB als Leerzeichen betrachtet. Eine vollständige Liste finden Sie unter MongoDB-Leerzeichen.
Andere Zeichen kürzen
Der $trim
Operator akzeptiert ein chars
Parameter, mit dem Sie angeben können, welche Zeichen gekürzt werden sollen.
Beispiel:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "g" } }
}
}
])
Ergebnis:
{ "_id" : 1, "name" : "Wa" }
Es hat sowohl g
entfernt Zeichen vom Ende des Wortes.
Mehrere Zeichen kürzen
Sie können mehrere Zeichen kürzen, indem Sie sie alle in chars
einfügen Argument.
Beispiel:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "Wgz" } }
}
}
])
Ergebnis:
{ "_id" : 1, "name" : "a" }
In diesem Fall habe ich drei Zeichen als chars
angegeben Argument, und zwei dieser Zeichen befanden sich zufällig an jedem Ende der Zeichenfolge. Daher wurden diese beiden Zeichen gekürzt. Tatsächlich wurden drei Zeichen gekürzt – ein W
und zwei g
Zeichen.
Seien Sie jedoch vorsichtig, wenn Sie dies tun. Folgendes passiert, wenn ich z
ersetze mit a
in den chars
Argument:
db.pets.aggregate([
{
$project: {
name: { $trim: { input: "$name", chars: "Wga" } }
}
}
])
Ergebnis:
{ "_id" : 1, "name" : "" }
Die ganze Kette ist verschwunden. Es hat nicht nur das W
getrimmt und g
von jedem Ende der Zeichenfolge, aber es hat auch das a
getrimmt aus der Saite – obwohl es in der Mitte der Saite war.
Zahlen trimmen
Der $trim
Operator arbeitet mit Strings. Wenn wir versuchen, das weight
zu kürzen Feld erhalten wir einen Fehler. Das liegt am weight
Feld ist eine Zahl, kein String.
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $trim: { input: "$weight", chars: "0" } }
}
}
])
Ergebnis:
Error: command failed: { "ok" : 0, "errmsg" : "$trim requires its input to be a string, got 20 (of type double) instead.", "code" : 50699, "codeName" : "Location50699" } : aggregate failed : [email protected]/mongo/shell/utils.js:25:13 [email protected]/mongo/shell/assert.js:18:14 [email protected]/mongo/shell/assert.js:618:17 [email protected]/mongo/shell/assert.js:708:16 [email protected]/mongo/shell/db.js:266:5 [email protected]/mongo/shell/collection.js:1046:12 @(shell):1:1
Der Fehler sagt uns, dass wir ein Double angegeben haben, obwohl $trim
Der Operator erfordert, dass seine Eingabe ein String ist.
Wenn wir die Null wirklich entfernen wollten, müssten wir sie zuerst in einen String umwandeln. Wir können das entweder mit $convert
machen oder $toString
Betreiber.
Beispiel:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $trim: { input: { $toString: "$weight" }, chars: "0" } }
}
}
])
Ergebnis:
{ "_id" : 1, "name" : "Wagg", "weight" : "2" }
Wir können es wieder zu einem Double machen, indem wir entweder den $convert
verwenden oder $toDouble
Betreiber.
Vollständiges Beispiel:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $trim: { input: { $toString: "$weight" }, chars: "0" } } }
}
}
])
Ergebnis:
{ "_id" : 1, "name" : "Wagg", "weight" : 2 }