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

MongoDB $trim

В 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 :
[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

Грешката ни казва, че сме предоставили двойно, въпреки че $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 }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Етапи на MongoDB Aggregation Framework и тръбопроводи

  2. Обектът на документа на MongoEngine, направен с помощта на from_json, не се запазва

  3. MongoDB - Проекционни заявки

  4. Заявката за дата с ISODate в mongodb изглежда не работи

  5. Mongodb:множество колекции или една голяма колекция с индекс