sql >> Database >  >> NoSQL >> MongoDB

MongoDB $trim

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

Het kan ook elk opgegeven teken verwijderen. U kunt het bijvoorbeeld gebruiken om alle koppeltekens te verwijderen (- ) of punten (. ) of alle s tekens, enz.

Voorbeeld

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

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

We kunnen zien dat het type veld bevat witruimte aan beide zijden van het woord Dog . We kunnen de $trim . gebruiken operator om dat veld terug te geven zonder de witruimte.

Voorbeeld:

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

Resultaat:

{ "_id" : 1, "name" : "Wagg", "type" : "Dog" }

Zoals verwacht, het type veld is geretourneerd zonder de spatie.

U kunt ook de $ltrim . gebruiken operator om het linkerdeel van de tekenreeks in te korten, en de $rtrim operator om de rechterkant van de tekenreeks in te korten.

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

Andere tekens bijsnijden

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

Voorbeeld:

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

Resultaat:

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

Het heeft zowel g . verwijderd tekens vanaf het einde van het woord.

Meerdere tekens inkorten

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

Voorbeeld:

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

Resultaat:

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

In dit geval heb ik drie tekens opgegeven als mijn chars argument, en twee van die karakters bevonden zich aan weerszijden van de string. Daarom werden die twee karakters bijgesneden. Eigenlijk zijn er drie tekens bijgesneden – één W en twee g tekens.

Wees echter voorzichtig wanneer u dit doet. Dit gebeurt er als ik z vervang met a in de chars argument:

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

Resultaat:

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

De hele reeks is verdwenen. Het heeft niet alleen de W . bijgesneden en g van elk uiteinde van de string, maar het heeft ook de a . bijgesneden van de string – ook al was het in het midden van de string.

Getallen bijsnijden

De $trim 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: { $trim: { input: "$weight", chars: "0" } } 
    } 
  }
])

Resultaat:

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

De fout vertelt ons dat we een dubbele hebben gegeven, hoewel de $trim 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: { $trim: { input: { $toString: "$weight" }, chars: "0" } }
    }
  }
])

Resultaat:

{ "_id" : 1, "name" : "Wagg", "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: { $trim: { input: { $toString: "$weight" }, chars: "0" } } }
    }
  }
])

Resultaat:

{ "_id" : 1, "name" : "Wagg", "weight" : 2 }

  1. Inhoudswaarde zoeken in redis door BookSleeve

  2. $unionWith - MongoDB's equivalent van UNION ALL

  3. 8 manieren om de dag van een date te krijgen in MongoDB

  4. Databasegebruikersbeheer met ClusterControl