No MongoDB, o
$rtrim
o operador de pipeline de agregação remove os espaços em branco do final de uma string. Isso inclui o caractere nulo. Ele também pode remover qualquer caractere especificado. Por exemplo, você pode usá-lo para remover todos os pontos (
.
), pontos de exclamação (!
), etc do final de uma string. Exemplo
Suponha que tenhamos uma coleção chamada
pets
com o seguinte documento:{ "_id" : 1, "name" : "Wag!!!", "type" : " Dog ", "weight" : 20 }
Podemos ver que o
type
campo inclui espaço em branco em ambos os lados da palavra Dog
. Podemos usar o $rtrim
operador para retornar esse campo com o espaço em branco removido da parte direita da string. Exemplo:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $rtrim: { input: "$type" } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "Wag!!!", "type" : " Dog" }
Como esperado, o
type
campo foi retornado sem o espaço em branco no final. O espaço em branco no início ainda permanece. Você também pode usar o
$ltrim
operador para cortar a parte esquerda da string, e o $trim
operador para aparar ambos os lados da corda. Existem alguns caracteres que o MongoDB considera como caracteres de espaço em branco. Consulte Caracteres de espaço em branco do MongoDB para obter uma lista completa.
Aparar outros caracteres
O
$rtrim
operador aceita um chars
parâmetro que permite especificar quais caracteres cortar. Exemplo:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!" } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "Wag" }
Neste caso, incluímos os
chars
parâmetro com um ponto de exclamação (!
), o que resultou na remoção de todos os três pontos de exclamação do final da string. Recortar vários caracteres
Você pode cortar vários caracteres incluindo todos eles em
chars
argumento. Exemplo:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!g" } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "Wa" }
Nesse caso, forneci dois caracteres como meus
chars
argumento, e dois desses caracteres estavam no final da string. Portanto, esses dois caracteres foram aparados. No entanto, tenha cuidado ao fazer isso. Aqui está o que acontece quando eu incluo todos os personagens:
db.pets.aggregate([
{
$project: {
name: { $rtrim: { input: "$name", chars: "!agW" } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "" }
A cadeia inteira desapareceu. Ele aparou não apenas o
!
e g
da string, mas também removeu o W
e a
personagens. Números de corte
O
$rtrim
operador trabalha em strings. Se tentarmos cortar o weight
campo, obtemos um erro. Isso ocorre porque o weight
campo é um número, não uma string. db.pets.aggregate([
{
$project: {
name: 1,
weight: { $rtrim: { input: "$weight", chars: "0" } }
}
}
])
Resultado:
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
O erro nos diz que fornecemos um double e que o
$rtrim
operador requer que sua entrada seja uma string. Se realmente quiséssemos remover o zero, precisaríamos primeiro convertê-lo em uma string. Podemos fazer isso com o
$convert
ou $toString
operador. Exemplo:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "Wag!!!", "weight" : "2" }
Podemos recuperá-lo para um duplo usando o
$convert
ou $toDouble
operador. Exemplo completo:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $rtrim: { input: { $toString: "$weight" }, chars: "0" } } }
}
}
])
Resultado:
{ "_id" : 1, "name" : "Wag!!!", "weight" : 2 }