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

MongoDB $trim

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 }