MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $rtrim

In MongoDB ist der $rtrim Der Aggregations-Pipeline-Operator entfernt Leerzeichen am Ende einer Zeichenfolge. Dies schließt das Nullzeichen ein.

Es kann auch jedes angegebene Zeichen entfernen. Beispielsweise könnten Sie damit alle Punkte entfernen (. ), Ausrufezeichen (! ), usw. vom Ende einer Zeichenfolge.

Beispiel

Angenommen, wir haben eine Sammlung namens pets mit folgendem Dokument:

{ "_id" : 1, "name" : "Wag!!!", "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 $rtrim verwenden -Operator, um dieses Feld mit dem aus dem rechten Teil der Zeichenfolge entfernten Leerzeichen zurückzugeben.

Beispiel:

db.pets.aggregate([
  { 
    $project: { 
      name: 1, 
      type: { $rtrim: { input: "$type" } } 
    } 
  }
])

Ergebnis:

{ "_id" : 1, "name" : "Wag!!!", "type" : "   Dog" } 

Wie erwartet, der type Feld wurde ohne Leerzeichen am Ende zurückgegeben. Der Leerraum am Anfang bleibt bestehen.

Sie können auch $ltrim verwenden -Operator zum Abschneiden des linken Teils der Zeichenfolge und $trim Operator, um beide Seiten der Zeichenfolge zu trimmen.

Es gibt einige Zeichen, die MongoDB als Leerzeichen betrachtet. Eine vollständige Liste finden Sie unter MongoDB-Leerzeichen.

Andere Zeichen kürzen

Der $rtrim Operator akzeptiert ein chars Parameter, mit dem Sie angeben können, welche Zeichen gekürzt werden sollen.

Beispiel:

db.pets.aggregate([
  { 
    $project: {
      name: { $rtrim: { input: "$name", chars: "!" } } 
    } 
  }
])

Ergebnis:

{ "_id" : 1, "name" : "Wag" } 

In diesem Fall haben wir die chars eingefügt Parameter mit einem Ausrufezeichen (! ), was dazu führte, dass alle drei Ausrufezeichen am Ende der Zeichenfolge entfernt wurden.

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: { $rtrim: { input: "$name", chars: "!g" } } 
    } 
  }
])

Ergebnis:

{ "_id" : 1, "name" : "Wa" } 

In diesem Fall habe ich zwei Zeichen als chars angegeben Argument, und zwei dieser Zeichen befanden sich zufällig am Ende der Zeichenfolge. Daher wurden diese beiden Zeichen gekürzt.

Seien Sie jedoch vorsichtig, wenn Sie dies tun. Folgendes passiert, wenn ich alle Zeichen einfüge:

db.pets.aggregate([
  { 
    $project: { 
      name: { $rtrim: { input: "$name", chars: "!agW" } } 
    } 
  }
])

Ergebnis:

{ "_id" : 1, "name" : "" }

Die ganze Kette ist verschwunden. Es hat nicht nur den ! getrimmt und g aus der Zeichenfolge, aber es hat auch das W entfernt und a Zeichen.

Zahlen trimmen

Der $rtrim 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: { $rtrim: { input: "$weight", chars: "0" } } 
    } 
  }
])

Ergebnis:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$rtrim 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 bereitgestellt haben und dass der $rtrim 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: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } }
    }
  }
])

Ergebnis:

{ "_id" : 1, "name" : "Wag!!!", "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: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } } }
    }
  }
])

Ergebnis:

{ "_id" : 1, "name" : "Wag!!!", "weight" : 2 }