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

MongoDB $rtrim

In MongoDB, il $rtrim l'operatore della pipeline di aggregazione rimuove gli spazi vuoti dalla fine di una stringa. Questo include il carattere nullo.

Può anche rimuovere qualsiasi carattere specificato. Ad esempio, puoi usarlo per rimuovere tutti i punti (. ), punti esclamativi (! ), ecc. dalla fine 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 $rtrim operatore per restituire quel campo con lo spazio bianco rimosso dalla parte destra della stringa.

Esempio:

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

Risultato:

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

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

Puoi anche usare il $ltrim per tagliare la parte sinistra 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 $rtrim l'operatore accetta un chars parametro che consente di specificare quali caratteri ritagliare.

Esempio:

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

Risultato:

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

In questo caso abbiamo incluso i chars parametro con un punto esclamativo (! ), che ha comportato la rimozione di tutti e tre i punti esclamativi dalla fine della stringa.

Taglia più caratteri

Puoi tagliare più caratteri includendoli tutti nei chars argomento.

Esempio:

db.pets.aggregate([
  { 
    $project: { 
      name: { $rtrim: { input: "$name", chars: "!g" } } 
    } 
  }
])

Risultato:

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

In questo caso, ho fornito due caratteri come chars argomento e due di quei caratteri si trovavano alla fine 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: { $rtrim: { input: "$name", chars: "!agW" } } 
    } 
  }
])

Risultato:

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

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

Numeri di rifilatura

Il $rtrim 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: { $rtrim: { input: "$weight", chars: "0" } } 
    } 
  }
])

Risultato:

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

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

Esempio:

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

Risultato:

{ "_id" : 1, "name" : "Wag!!!", "weight" : "2" } 

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

Esempio completo:

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

Risultato:

{ "_id" : 1, "name" : "Wag!!!", "weight" : 2 }