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

MongoDB $ltrim

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

Es kann auch jedes angegebene Zeichen entfernen. Beispielsweise könnten Sie damit alle Bindestriche entfernen (- ) vom Anfang 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 $ltrim verwenden -Operator, um dieses Feld mit dem aus dem linken Teil der Zeichenfolge entfernten Leerzeichen zurückzugeben.

Beispiel:

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

Ergebnis:

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

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

Sie können auch den $rtrim verwenden -Operator zum Abschneiden des rechten 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 $ltrim Operator akzeptiert ein chars Parameter, mit dem Sie angeben können, welche Zeichen gekürzt werden sollen.

Beispiel:

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

Ergebnis:

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

In diesem Fall haben wir die chars eingefügt Parameter mit einem Bindestrich (- ), was dazu führte, dass der Bindestrich am Wortanfang entfernt wurde.

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: { $ltrim: { input: "$name", chars: "W-" } } 
    } 
  }
])

Ergebnis:

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

In diesem Fall habe ich zwei Zeichen als chars angegeben -Argument, und zwei dieser Zeichen befanden sich zufällig am Anfang 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: { $ltrim: { input: "$name", chars: "W-ag" } } 
    } 
  }
])

Ergebnis:

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

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

Zahlen trimmen

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

Ergebnis:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$ltrim 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 die $ltrim Der Operator erfordert, dass seine Eingabe ein String ist.

Wenn wir die 2 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: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } }
    }
  }
])

Ergebnis:

{ "_id" : 1, "name" : "-Wag", "weight" : "0" } 

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: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } } }
    }
  }
])

Ergebnis:

{ "_id" : 1, "name" : "-Wag", "weight" : 0 }