W MongoDB $ltrim Operator potoku agregacji usuwa białe znaki z początku ciągu. Obejmuje to znak null.
Może również usunąć dowolny określony znak. Na przykład możesz go użyć do usunięcia wszystkich znaków łącznika (- ) od początku ciągu.
Przykład
Załóżmy, że mamy kolekcję o nazwie pets z następującym dokumentem:
{ "_id" : 1, "name" : "-Wag", "type" : " Dog ", "weight" : 20 }
Widzimy, że type pole zawiera białe znaki po obu stronach słowa Dog . Możemy użyć $ltrim operatora, aby zwrócić to pole z usuniętą spacją z lewej części ciągu.
Przykład:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $ltrim: { input: "$type" } }
}
}
]) Wynik:
{ "_id" : 1, "name" : "-Wag", "type" : "Dog " }
Zgodnie z oczekiwaniami type pole zostało zwrócone bez spacji na początku. Biała spacja na końcu nadal pozostaje.
Możesz także użyć $rtrim operator do przycinania prawej części łańcucha i $trim operatora, aby przyciąć obie strony łańcucha.
Istnieje wiele znaków, które MongoDB uważa za znaki odstępu. Zobacz pełną listę znaków odstępu MongoDB.
Przytnij inne znaki
$ltrim operator akceptuje chars parametr, który pozwala określić, które znaki należy przyciąć.
Przykład:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "-" } }
}
}
]) Wynik:
{ "_id" : 1, "name" : "Wag" }
W tym przypadku dołączyliśmy chars parametr z myślnikiem (- ), co spowodowało usunięcie myślnika z początku słowa.
Przytnij wiele znaków
Możesz przyciąć wiele znaków, umieszczając je wszystkie w chars argument.
Przykład:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-" } }
}
}
]) Wynik:
{ "_id" : 1, "name" : "ag" }
W tym przypadku podałem dwa znaki jako moje chars argument, a dwa z tych znaków znalazły się na początku łańcucha. Dlatego te dwie postacie zostały przycięte.
Bądź jednak ostrożny, kiedy to robisz. Oto, co się dzieje, gdy uwzględnię wszystkie znaki:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-ag" } }
}
}
]) Wynik:
{ "_id" : 1, "name" : "" }
Zniknął cały ciąg. Przycięto nie tylko - i W z ciągu, ale usunięto również a i g znaków.
Liczby przycinające
$ltrim operator działa na ciągach. Jeśli spróbujemy przyciąć weight pole, otrzymujemy błąd. Dzieje się tak, ponieważ weight pole jest liczbą, a nie ciągiem.
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: "$weight", chars: "2" } }
}
}
]) Wynik:
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
Błąd informuje nas, że podaliśmy dublet i że $ltrim operator wymaga, aby jego dane wejściowe były ciągiem.
Gdybyśmy naprawdę chcieli usunąć 2, musielibyśmy najpierw przekonwertować ją na ciąg. Możemy to zrobić za pomocą $convert lub $toString operatora.
Przykład:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } }
}
}
]) Wynik:
{ "_id" : 1, "name" : "-Wag", "weight" : "0" }
Możemy przywrócić to do podwójnego za pomocą $convert lub $toDouble operatora.
Pełny przykład:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } } }
}
}
]) Wynik:
{ "_id" : 1, "name" : "-Wag", "weight" : 0 }