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

MongoDB $ trim

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

Può anche rimuovere qualsiasi carattere specificato. Ad esempio, puoi usarlo per rimuovere tutti i trattini (- ) o punti (. ) o tutti i s caratteri, ecc.

Esempio

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

{ "_id" : 1, "name" : "Wagg", "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 $trim operatore per restituire quel campo con lo spazio vuoto.

Esempio:

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

Risultato:

{ "_id" : 1, "name" : "Wagg", "type" : "Dog" }

Come previsto, il type il campo è stato restituito senza spazi bianchi.

Puoi anche usare il $ltrim per tagliare la parte sinistra della stringa e il $rtrim operatore per tagliare il lato destro della stringa.

In realtà 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 $trim l'operatore accetta un chars parametro che consente di specificare quali caratteri ritagliare.

Esempio:

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

Risultato:

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

Ha rimosso entrambi g caratteri dalla fine della parola.

Taglia più caratteri

Puoi tagliare più caratteri includendoli tutti nei chars argomento.

Esempio:

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

Risultato:

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

In questo caso, ho fornito tre caratteri come chars argomento e due di quei caratteri si trovavano alle due estremità della stringa. Pertanto, quei due personaggi sono stati tagliati. In realtà, tre caratteri sono stati tagliati:uno W e due g caratteri.

Tuttavia, fai attenzione quando lo fai. Ecco cosa succede quando sostituisco z con a nei chars argomento:

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

Risultato:

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

L'intera stringa è scomparsa. Ha tagliato non solo il W e g da ciascuna estremità della stringa, ma ha anche tagliato il a dalla corda, anche se era nel mezzo della corda.

Numeri di rifilatura

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

Risultato:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$trim 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, anche se $trim 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: { $trim: { input: { $toString: "$weight" }, chars: "0" } }
    }
  }
])

Risultato:

{ "_id" : 1, "name" : "Wagg", "weight" : "2" }

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

Esempio completo:

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

Risultato:

{ "_id" : 1, "name" : "Wagg", "weight" : 2 }