sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $rtrim

I MongoDB er $rtrim aggregeringspipeline-operatør fjerner mellemrum fra enden af ​​en streng. Dette inkluderer null-tegnet.

Det kan også fjerne ethvert angivet tegn. For eksempel kan du bruge det til at fjerne alle punktum (. ), udråbstegn (! ), osv. fra slutningen af ​​en streng.

Eksempel

Antag, at vi har en samling kaldet pets med følgende dokument:

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

Vi kan se, at type feltet inkluderer et mellemrum på begge sider af ordet Dog . Vi kan bruge $rtrim operatør for at returnere det felt med mellemrummet fjernet fra højre del af strengen.

Eksempel:

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

Resultat:

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

Som forventet, type felt er blevet returneret uden mellemrum i slutningen. Mellemrummet i begyndelsen er stadig tilbage.

Du kan også bruge $ltrim operatør for at trimme den venstre del af strengen og $trim operatør for at trimme begge sider af strengen.

Der er en del tegn, som MongoDB anser for at være mellemrumstegn. Se MongoDB Whitespace-tegn for en komplet liste.

Trim andre tegn

$rtrim operatør accepterer en chars parameter, der giver dig mulighed for at angive, hvilke tegn der skal trimmes.

Eksempel:

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

Resultat:

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

I dette tilfælde inkluderede vi chars parameter med et udråbstegn (! ), hvilket resulterede i, at alle tre udråbstegn blev fjernet fra enden af ​​strengen.

Trim flere tegn

Du kan trimme flere tegn ved at inkludere dem alle i chars argument.

Eksempel:

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

Resultat:

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

I dette tilfælde har jeg angivet to tegn som mine chars argument, og to af disse tegn var tilfældigvis i slutningen af ​​strengen. Derfor blev de to karakterer trimmet.

Vær dog forsigtig, når du gør dette. Her er, hvad der sker, når jeg inkluderer alle tegn:

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

Resultat:

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

Hele strengen er forsvundet. Det har trimmet ikke kun ! og g fra strengen, men den har også fjernet W og a tegn.

Trimning af tal

$rtrim operatør arbejder på strenge. Hvis vi forsøger at trimme weight felt, får vi en fejl. Dette skyldes, at weight felt er et tal, ikke en streng.

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

Resultat:

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

Fejlen fortæller os, at vi har leveret en dobbelt, og at $rtrim operatoren kræver, at dens input er en streng.

Hvis vi virkelig ville fjerne nullet, skulle vi først konvertere det til en streng. Vi kan gøre det med enten $convert eller $toString operatør.

Eksempel:

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

Resultat:

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

Vi kan få det tilbage til en fordobling ved at bruge enten $convert eller $toDouble operatør.

Fuldstændig eksempel:

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

Resultat:

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

  1. Redis klientbiblioteksanbefalinger til brug fra Scala

  2. HDFS Tutorial – En komplet introduktion til HDFS for begyndere

  3. Sådan optimeres ydeevnen af ​​ClusterControl og dens komponenter

  4. MongoDB vs MySQL