MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $rtrim

В MongoDB, $rtrim Операторът на тръбопровода за агрегиране премахва празно пространство от края на низ. Това включва нулевия символ.

Може също да премахне всеки посочен знак. Например, можете да го използвате, за да премахнете всички точки (. ), удивителни знаци (! ) и т.н. от края на низ.

Пример

Да предположим, че имаме колекция, наречена pets със следния документ:

{ "_id" : 1, "name" : "Wag!!!", "type" : "   Dog   ", "weight" : 20 }

Можем да видим, че type полето включва празно пространство от двете страни на думата Dog . Можем да използваме $rtrim оператор, за да върне това поле с премахнато празно пространство от дясната част на низа.

Пример:

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

Резултат:

{ "_id" : 1, "name" : "Wag!!!", "type" : "   Dog" } 

Както се очакваше, type полето е върнато без празното пространство в края. Пробелът в началото все още остава.

Можете също да използвате $ltrim оператор за отрязване на лявата част на низа и $trim оператор за отрязване на двете страни на низа.

Има доста знаци, които MongoDB счита за символи за интервал. Вижте MongoDB Whitespace Characters за пълен списък.

Отрежете други знаци

$rtrim операторът приема chars параметър, който ви позволява да посочите кои знаци да отрежете.

Пример:

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

Резултат:

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

В този случай включихме chars параметър с удивителен знак (! ), което доведе до премахването на трите удивителни знака от края на низа.

Отрязване на няколко знака

Можете да отрежете няколко знака, като ги включите всички в chars аргумент.

Пример:

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

Резултат:

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

В този случай предоставих два знака като мои chars аргумент и два от тези символа се оказаха в края на низа. Следователно тези два знака бяха подрязани.

Въпреки това, бъдете внимателни, когато правите това. Ето какво се случва, когато включа всички знаци:

db.pets.aggregate([
  { 
    $project: { 
      name: { $rtrim: { input: "$name", chars: "!agW" } } 
    } 
  }
])

Резултат:

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

Целият низ е изчезнал. Той е отрязал не само ! и g от низа, но също така е премахнал W и a знаци.

Подрязване на числа

$rtrim операторът работи върху низове. Ако се опитаме да отрежем weight поле получаваме грешка. Това е така, защото weight полето е число, а не низ.

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

Резултат:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$rtrim 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

Грешката ни казва, че сме предоставили двоен и че $rtrim операторът изисква въвеждането му да бъде низ.

Ако наистина искаме да премахнем нулата, първо трябва да я преобразуваме в низ. Можем да направим това или с $convert или $toString оператор.

Пример:

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

Резултат:

{ "_id" : 1, "name" : "Wag!!!", "weight" : "2" } 

Можем да го върнем към двоен, като използваме или $convert или $toDouble оператор.

Пълен пример:

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

Резултат:

{ "_id" : 1, "name" : "Wag!!!", "weight" : 2 } 

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Вграден документ срещу препратка в модела на дизайн на мангуста?

  2. Енуми в MongoDB

  3. MongoDB заявява няколко колекции наведнъж

  4. Премахване чрез _id в конзолата на MongoDB

  5. Свързване с MongoDB през SSL с Node.js