sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $rtrim

V MongoDB, $rtrim operátor agregačního kanálu odstraní mezery z konce řetězce. To zahrnuje znak null.

Může také odstranit jakýkoli zadaný znak. Můžete jej například použít k odstranění všech teček (. ), vykřičníky (! ), atd. od konce řetězce.

Příklad

Předpokládejme, že máme sbírku nazvanou pets s následujícím dokumentem:

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

Vidíme, že type pole obsahuje prázdné místo na obou stranách slova Dog . Můžeme použít $rtrim operátor vrátí toto pole s odstraněnými mezerami z pravé části řetězce.

Příklad:

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

Výsledek:

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

Jak se očekávalo, type pole bylo vráceno bez mezer na konci. Prázdné znaky na začátku stále zůstávají.

Můžete také použít $ltrim operátor pro oříznutí levé části řetězce a $trim operátor pro oříznutí obou stran řetězce.

Existuje poměrně málo znaků, které MongoDB považuje za znaky s mezerami. Úplný seznam najdete v MongoDB Whitespace Characters.

Oříznout další znaky

$rtrim operátor přijímá chars parametr, který umožňuje určit, které znaky se mají oříznout.

Příklad:

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

Výsledek:

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

V tomto případě jsme zahrnuli chars parametr s vykřičníkem (! ), což vedlo k odstranění všech tří vykřičníků z konce řetězce.

Oříznout více znaků

Více znaků můžete oříznout tak, že je všechny zahrnete do chars argument.

Příklad:

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

Výsledek:

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

V tomto případě jsem jako chars uvedl dva znaky argument a dva z těchto znaků byly náhodou na konci řetězce. Proto byly tyto dva znaky oříznuty.

Při tom však buďte opatrní. Když zahrnu všechny znaky, stane se toto:

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

Výsledek:

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

Celý řetězec zmizel. Omezil nejen ! a g z řetězce, ale také odstranil W a a znaky.

Oříznutí čísel

$rtrim operátor pracuje na řetězcích. Pokud se pokusíme oříznout weight pole, dostaneme chybu. Důvodem je weight pole je číslo, nikoli řetězec.

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

Výsledek:

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

Chyba nám říká, že jsme poskytli double a že $rtrim operátor vyžaduje, aby jeho vstup byl řetězec.

Pokud bychom opravdu chtěli odstranit nulu, museli bychom ji nejprve převést na řetězec. Můžeme to udělat buď pomocí $convert nebo $toString operátor.

Příklad:

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

Výsledek:

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

Můžeme to vrátit zpět na dvojnásobek buď pomocí $convert nebo $toDouble operátor.

Úplný příklad:

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

Výsledek:

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

  1. Odebrat pole nalezené v libovolném poli mongodb

  2. Mongo DB najít podle názvu pole s libovolnou hodnotou

  3. Stubbing Redis interakce v javascriptu pomocí Sinon

  4. Závažná chyba:Třída 'MongoDB\Driver\Manager' nebyla nalezena