V MongoDB, $ltrim operátor agregačního kanálu odstraní mezery ze začátku řetězce. To zahrnuje znak null.
Může také odstranit jakýkoli zadaný znak. Můžete jej například použít k odstranění všech znaků spojovníku (- ) od začátku řetězce.
Příklad
Předpokládejme, že máme sbírku nazvanou pets s následujícím dokumentem:
{ "_id" : 1, "name" : "-Wag", "type" : " Dog ", "weight" : 20 }
Vidíme, že type pole obsahuje prázdné místo na obou stranách slova Dog . Můžeme použít $ltrim operátor, který vrátí toto pole s prázdným znakem odstraněným z levé části řetězce.
Příklad:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $ltrim: { input: "$type" } }
}
}
]) Výsledek:
{ "_id" : 1, "name" : "-Wag", "type" : "Dog " }
Jak se očekávalo, type pole bylo vráceno bez mezer na začátku. Mezera na konci stále zůstává.
Můžete také použít $rtrim operátor pro oříznutí pravé části řetězce a $trim operátor pro oříznutí obou stran řetězce.
Existuje poměrně málo znaků, které MongoDB považuje za znaky s mezerami. Úplný seznam najdete v MongoDB Whitespace Characters.
Oříznout další znaky
$ltrim operátor přijímá chars parametr, který umožňuje určit, které znaky se mají oříznout.
Příklad:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "-" } }
}
}
]) Výsledek:
{ "_id" : 1, "name" : "Wag" }
V tomto případě jsme zahrnuli chars parametr s pomlčkou (- ), což vedlo k odstranění pomlčky ze začátku slova.
Oříznout více znaků
Více znaků můžete oříznout tak, že je všechny zahrnete do chars argument.
Příklad:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-" } }
}
}
]) Výsledek:
{ "_id" : 1, "name" : "ag" }
V tomto případě jsem jako chars uvedl dva znaky argument a dva z těchto znaků byly náhodou na začátku řetězce. Proto byly tyto dva znaky oříznuty.
Při tom však buďte opatrní. Když zahrnu všechny znaky, stane se toto:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-ag" } }
}
}
]) Výsledek:
{ "_id" : 1, "name" : "" }
Celý řetězec zmizel. Omezil nejen - a W z řetězce, ale také odstranil a a g znaky.
Oříznutí čísel
$ltrim operátor pracuje na řetězcích. Pokud se pokusíme oříznout weight pole, dostaneme chybu. Důvodem je weight pole je číslo, nikoli řetězec.
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: "$weight", chars: "2" } }
}
}
]) Výsledek:
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
Chyba nám říká, že jsme poskytli double a že $ltrim operátor vyžaduje, aby jeho vstup byl řetězec.
Pokud bychom opravdu chtěli odstranit 2, museli bychom to nejprve převést na řetězec. Můžeme to udělat buď pomocí $convert nebo $toString operátor.
Příklad:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } }
}
}
]) Výsledek:
{ "_id" : 1, "name" : "-Wag", "weight" : "0" }
Můžeme to vrátit zpět na dvojnásobek buď pomocí $convert nebo $toDouble operátor.
Úplný příklad:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } } }
}
}
]) Výsledek:
{ "_id" : 1, "name" : "-Wag", "weight" : 0 }