В MongoDB, $ltrim
Операторът на тръбопровода за агрегиране премахва празно пространство от началото на низ. Това включва нулевия символ.
Може също да премахне всеки посочен знак. Например, можете да го използвате, за да премахнете всички знаци за тире (-
) от началото на низ.
Пример
Да предположим, че имаме колекция, наречена pets
със следния документ:
{ "_id" : 1, "name" : "-Wag", "type" : " Dog ", "weight" : 20 }
Можем да видим, че type
полето включва празно пространство от двете страни на думата Dog
. Можем да използваме $ltrim
оператор, за да върне това поле с премахнато празно пространство от лявата част на низа.
Пример:
db.pets.aggregate([
{
$project: {
name: 1,
type: { $ltrim: { input: "$type" } }
}
}
])
Резултат:
{ "_id" : 1, "name" : "-Wag", "type" : "Dog " }
Както се очакваше, type
полето е върнато без празното пространство в началото. Пробелът в края все още остава.
Можете също да използвате $rtrim
оператор за отрязване на дясната част от низа и $trim
оператор за отрязване на двете страни на низа.
Има доста знаци, които MongoDB счита за символи за интервали. Вижте MongoDB Whitespace Characters за пълен списък.
Отрежете други знаци
$ltrim
операторът приема chars
параметър, който ви позволява да посочите кои знаци да отрежете.
Пример:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "-" } }
}
}
])
Резултат:
{ "_id" : 1, "name" : "Wag" }
В този случай включихме chars
параметър с тире (-
), което доведе до премахване на тирето от началото на думата.
Отрязване на няколко знака
Можете да отрежете няколко знака, като ги включите всички в chars
аргумент.
Пример:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-" } }
}
}
])
Резултат:
{ "_id" : 1, "name" : "ag" }
В този случай предоставих два знака като мои chars
аргумент и два от тези символа се оказаха в началото на низа. Следователно тези два знака бяха подрязани.
Въпреки това, бъдете внимателни, когато правите това. Ето какво се случва, когато включа всички знаци:
db.pets.aggregate([
{
$project: {
name: { $ltrim: { input: "$name", chars: "W-ag" } }
}
}
])
Резултат:
{ "_id" : 1, "name" : "" }
Целият низ е изчезнал. Той е отрязал не само -
и W
от низа, но също така е премахнал a
и g
знаци.
Подрязване на числа
$ltrim
операторът работи върху низове. Ако се опитаме да отрежем weight
поле получаваме грешка. Това е така, защото weight
полето е число, а не низ.
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: "$weight", chars: "2" } }
}
}
])
Резултат:
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
Грешката ни казва, че сме предоставили двоен и че $ltrim
операторът изисква въвеждането му да бъде низ.
Ако наистина искаме да премахнем 2, първо трябва да го преобразуваме в низ. Можем да направим това или с $convert
или $toString
оператор.
Пример:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } }
}
}
])
Резултат:
{ "_id" : 1, "name" : "-Wag", "weight" : "0" }
Можем да го върнем към двоен, като използваме или $convert
или $toDouble
оператор.
Пълен пример:
db.pets.aggregate([
{
$project: {
name: 1,
weight: { $toDouble: { $ltrim: { input: { $toString: "$weight" }, chars: "2" } } }
}
}
])
Резултат:
{ "_id" : 1, "name" : "-Wag", "weight" : 0 }