sql >> Database >  >> NoSQL >> MongoDB

MongoDB $rtrim

In MongoDB, de $rtrim aggregatiepijplijnoperator verwijdert witruimte aan het einde van een tekenreeks. Dit omvat het null-teken.

Het kan ook elk opgegeven teken verwijderen. U kunt het bijvoorbeeld gebruiken om alle punten te verwijderen (. ), uitroeptekens (! ), etc vanaf het einde van een string.

Voorbeeld

Stel dat we een verzameling hebben met de naam pets met het volgende document:

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

We kunnen zien dat het type veld bevat witruimte aan beide zijden van het woord Dog . We kunnen de $rtrim . gebruiken operator om dat veld te retourneren met de witruimte verwijderd uit het rechtergedeelte van de tekenreeks.

Voorbeeld:

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

Resultaat:

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

Zoals verwacht, het type veld is geretourneerd zonder de spatie aan het einde. De witruimte aan het begin blijft bestaan.

U kunt ook de $ltrim . gebruiken operator om het linkerdeel van de tekenreeks in te korten, en de $trim operator om beide zijden van de string in te korten.

Er zijn nogal wat tekens die MongoDB beschouwt als witruimtetekens. Zie MongoDB-witruimtetekens voor een volledige lijst.

Andere tekens bijsnijden

De $rtrim operator accepteert een chars parameter waarmee u kunt specificeren welke tekens moeten worden bijgesneden.

Voorbeeld:

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

Resultaat:

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

In dit geval hebben we de chars parameter met een uitroepteken (! ), wat ertoe leidde dat alle drie de uitroeptekens aan het einde van de tekenreeks werden verwijderd.

Meerdere tekens inkorten

U kunt meerdere tekens inkorten door ze allemaal op te nemen in de chars argument.

Voorbeeld:

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

Resultaat:

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

In dit geval heb ik twee tekens opgegeven als mijn chars argument, en twee van die tekens stonden aan het einde van de string. Daarom werden die twee karakters bijgesneden.

Wees echter voorzichtig wanneer u dit doet. Dit is wat er gebeurt als ik alle tekens toevoeg:

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

Resultaat:

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

De hele reeks is verdwenen. Het heeft niet alleen de ! . bijgesneden en g uit de string, maar het heeft ook de W . verwijderd en a tekens.

Getallen bijsnijden

De $rtrim operator werkt op strings. Als we proberen het weight te verminderen veld, krijgen we een foutmelding. Dit komt omdat het weight veld is een getal, geen tekenreeks.

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

Resultaat:

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

De fout vertelt ons dat we een dubbele hebben gegeven en dat de $rtrim operator vereist dat de invoer een tekenreeks is.

Als we de nul echt willen verwijderen, moeten we deze eerst naar een tekenreeks converteren. We kunnen dat doen met de $convert of $toString telefoniste.

Voorbeeld:

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

Resultaat:

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

We kunnen het terug naar een dubbel krijgen door ofwel de $convert . te gebruiken of $toDouble telefoniste.

Volledig voorbeeld:

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

Resultaat:

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

  1. Promise en nodejs MongoDB-stuurprogramma

  2. MongoDB $weeklyUpdate #66 (22 april 2022):Hackathons, mongosh en Github

  3. mongo-commando wordt niet herkend bij het proberen verbinding te maken met een mongodb-server

  4. Mongoose.js instance.save() callback wordt niet geactiveerd