MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB $ltrim

In MongoDB, il $ltrim l'operatore della pipeline di aggregazione rimuove gli spazi vuoti dall'inizio di una stringa. Questo include il carattere nullo.

Può anche rimuovere qualsiasi carattere specificato. Ad esempio, puoi usarlo per rimuovere tutti i trattini (- ) dall'inizio di una stringa.

Esempio

Supponiamo di avere una collezione chiamata pets con il seguente documento:

{ "_id" : 1, "name" : "-Wag", "type" : "   Dog   ", "weight" : 20 }

Possiamo vedere che il type il campo include uno spazio bianco su entrambi i lati della parola Dog . Possiamo usare il $ltrim operatore per restituire quel campo con lo spazio bianco rimosso dalla parte sinistra della stringa.

Esempio:

db.pets.aggregate([
  { 
    $project: { 
      name: 1, 
      type: { $ltrim: { input: "$type" } } 
    } 
  }
])

Risultato:

{ "_id" : 1, "name" : "-Wag", "type" : "Dog   " }

Come previsto, il type il campo è stato restituito senza gli spazi bianchi all'inizio. Lo spazio bianco alla fine rimane ancora.

Puoi anche usare $rtrim per tagliare la parte destra della stringa e il $trim operatore per tagliare entrambi i lati della stringa.

Ci sono alcuni caratteri che MongoDB ritiene essere caratteri di spazi bianchi. Per un elenco completo, consulta i caratteri degli spazi bianchi di MongoDB.

Taglia altri personaggi

Il $ltrim l'operatore accetta un chars parametro che consente di specificare quali caratteri ritagliare.

Esempio:

db.pets.aggregate([
  { 
    $project: {
      name: { $ltrim: { input: "$name", chars: "-" } } 
    } 
  }
])

Risultato:

{ "_id" : 1, "name" : "Wag" } 

In questo caso abbiamo incluso i chars parametro con un trattino (- ), che ha comportato la rimozione del trattino dall'inizio della parola.

Taglia più caratteri

Puoi tagliare più caratteri includendoli tutti nei chars argomento.

Esempio:

db.pets.aggregate([
  { 
    $project: { 
      name: { $ltrim: { input: "$name", chars: "W-" } } 
    } 
  }
])

Risultato:

{ "_id" : 1, "name" : "ag" } 

In questo caso, ho fornito due caratteri come chars argomento e due di quei caratteri si trovavano all'inizio della stringa. Pertanto, quei due personaggi sono stati tagliati.

Tuttavia, fai attenzione quando lo fai. Ecco cosa succede quando includo tutti i caratteri:

db.pets.aggregate([
  { 
    $project: { 
      name: { $ltrim: { input: "$name", chars: "W-ag" } } 
    } 
  }
])

Risultato:

{ "_id" : 1, "name" : "" }

L'intera stringa è scomparsa. Ha tagliato non solo il - e W dalla stringa, ma ha anche rimosso il a e g caratteri.

Numeri di rifilatura

Il $ltrim l'operatore lavora sulle stringhe. Se proviamo a tagliare il weight campo, otteniamo un errore. Questo perché il weight il campo è un numero, non una stringa.

db.pets.aggregate([
  { 
    $project: { 
      name: 1, 
      weight: { $ltrim: { input: "$weight", chars: "2" } } 
    } 
  }
])

Risultato:

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 :
[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'errore ci dice che abbiamo fornito un double e che il $ltrim l'operatore richiede che l'input sia una stringa.

Se volessimo davvero rimuovere il 2, dovremmo prima convertirlo in una stringa. Possiamo farlo con $convert o $toString operatore.

Esempio:

db.pets.aggregate([
  { 
    $project: { 
      name: 1, 
      weight: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } }
    }
  }
])

Risultato:

{ "_id" : 1, "name" : "-Wag", "weight" : "0" } 

Possiamo riportarlo a un doppio usando il $convert o $toDouble operatore.

Esempio completo:

db.pets.aggregate([
  { 
    $project: { 
      name: 1, 
      weight: { $toDouble: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } } }
    }
  }
])

Risultato:

{ "_id" : 1, "name" : "-Wag", "weight" : 0 }