MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB $rtrim


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 }