Dans MongoDB, le $rtrim
L'opérateur de pipeline d'agrégation supprime les espaces à la fin d'une chaîne. Cela inclut le caractère nul.
Il peut également supprimer tout caractère spécifié. Par exemple, vous pouvez l'utiliser pour supprimer tous les points (.
), points d'exclamation (!
), etc à partir de la fin d'une chaîne.
Exemple
Supposons que nous ayons une collection appelée pets
avec le document suivant :
{ "_id" : 1, "name" : "Wag!!!", "type" : " Dog ", "weight" : 20 }
Nous pouvons voir que le type
le champ inclut un espace blanc des deux côtés du mot Dog
. Nous pouvons utiliser le $rtrim
opérateur pour renvoyer ce champ avec l'espace blanc supprimé de la partie droite de la chaîne.
Exemple :
db.pets.aggregate([
{
$project: {
name: 1,
type: { $rtrim: { input: "$type" } }
}
}
])
Résultat :
{ "_id" : 1, "name" : "Wag!!!", "type" : " Dog" }
Comme prévu, le type
champ a été renvoyé sans l'espace blanc à la fin. L'espace au début reste toujours.
Vous pouvez également utiliser le $ltrim
pour couper la partie gauche de la chaîne, et le $trim
opérateur pour couper les deux côtés de la chaîne.
Il y a pas mal de caractères que MongoDB considère comme des caractères d'espacement. Voir Caractères d'espace blanc MongoDB pour une liste complète.
Rogner les autres caractères
Le $rtrim
l'opérateur accepte un chars
paramètre qui vous permet de spécifier les caractères à découper.
Exemple :
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!" } }
}
}
])
Résultat :
{ "_id" : 1, "name" : "Wag" }
Dans ce cas, nous avons inclus les chars
paramètre avec un point d'exclamation (!
), ce qui a entraîné la suppression des trois points d'exclamation à la fin de la chaîne.
Rogner plusieurs caractères
Vous pouvez couper plusieurs caractères en les incluant tous dans les chars
arguments.
Exemple :
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!g" } }
}
}
])
Résultat :
{ "_id" : 1, "name" : "Wa" }
Dans ce cas, j'ai fourni deux caractères comme mes chars
argument, et deux de ces caractères se trouvaient à la fin de la chaîne. Par conséquent, ces deux personnages ont été coupés.
Cependant, soyez prudent lorsque vous faites cela. Voici ce qui se passe lorsque j'inclus tous les caractères :
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!agW" } }
}
}
])
Résultat :
{ "_id" : 1, "name" : "" }
Toute la chaîne a disparu. Il a coupé non seulement le !
et g
de la chaîne, mais il a également supprimé le W
et a
caractères.
Ajuster les nombres
Le $rtrim
L'opérateur travaille sur des chaînes. Si nous essayons de réduire le weight
champ, nous obtenons une erreur. C'est parce que le weight
le champ est un nombre, pas une chaîne.
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $rtrim: { input: "$weight", chars: "0" } }
}
}
])
Résultat :
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
L'erreur nous indique que nous avons fourni un double, et que le $rtrim
l'opérateur nécessite que son entrée soit une chaîne.
Si nous voulions vraiment supprimer le zéro, nous devions d'abord le convertir en chaîne. Nous pouvons le faire soit avec le $convert
ou $toString
opérateur.
Exemple :
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } }
}
}
])
Résultat :
{ "_id" : 1, "name" : "Wag!!!", "weight" : "2" }
Nous pouvons le ramener à un double en utilisant soit le $convert
ou $toDouble
opérateur.
Exemple complet :
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } } }
}
}
])
Résultat :
{ "_id" : 1, "name" : "Wag!!!", "weight" : 2 }