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