No MongoDB, o
$ltrim o operador de pipeline de agregação remove os espaços em branco do início 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 caracteres de hífen (
- ) do início 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 $ltrim operador para retornar esse campo com o espaço em branco removido da parte esquerda da string. Exemplo:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $ltrim: { input: "$type" } }
}
}
]) Resultado:
{ "_id" : 1, "name" : "-Wag", "type" : "Dog " } Como esperado, o
type campo foi retornado sem o espaço em branco no início. O espaço em branco no final ainda permanece. Você também pode usar o
$rtrim operador para cortar a parte direita 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
$ltrim operador aceita um chars parâmetro que permite especificar quais caracteres cortar. Exemplo:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "-" } }
}
}
]) Resultado:
{ "_id" : 1, "name" : "Wag" } Neste caso, incluímos os
chars parâmetro com um hífen (- ), o que resultou na remoção do hífen do início da palavra. Recortar vários caracteres
Você pode cortar vários caracteres incluindo todos eles em
chars argumento. Exemplo:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-" } }
}
}
]) Resultado:
{ "_id" : 1, "name" : "ag" } Nesse caso, forneci dois caracteres como meus
chars argumento, e dois desses caracteres estavam no início 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: { $ltrim: { input: "$name", chars: "W-ag" } }
}
}
]) Resultado:
{ "_id" : 1, "name" : "" } A cadeia inteira desapareceu. Ele aparou não apenas o
- e W da string, mas também removeu o a e g personagens. Números de corte
O
$ltrim 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: { $ltrim: { input: "$weight", chars: "2" } }
}
}
]) Resultado:
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 :
example@sqldat.com/mongo/shell/utils.js:25:13
example@sqldat.com/mongo/shell/assert.js:18:14
example@sqldat.com/mongo/shell/assert.js:618:17
assert.commaexample@sqldat.com/mongo/shell/assert.js:708:16
example@sqldat.com/mongo/shell/db.js:266:5
example@sqldat.com/mongo/shell/collection.js:1046:12
@(shell):1:1 O erro nos diz que fornecemos um double e que o
$ltrim operador requer que sua entrada seja uma string. Se realmente quiséssemos remover o 2, 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: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } }
}
}
]) Resultado:
{ "_id" : 1, "name" : "-Wag", "weight" : "0" } Podemos recuperá-lo para um duplo usando o
$convert ou $toDouble operador. Exemplo completo:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } } }
}
}
]) Resultado:
{ "_id" : 1, "name" : "-Wag", "weight" : 0 }