sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $ltrim

I MongoDB, $ltrim aggregeringspipeline-operatören tar bort blanksteg från början av en sträng. Detta inkluderar null-tecknet.

Det kan också ta bort alla angivna tecken. Du kan till exempel använda den för att ta bort alla bindestreck (- ) från början av en sträng.

Exempel

Anta att vi har en samling som heter pets med följande dokument:

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

Vi kan se att type fältet innehåller blanksteg på båda sidor av ordet Dog . Vi kan använda $ltrim operatorn för att returnera det fältet med blanktecken borttagen från den vänstra delen av strängen.

Exempel:

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

Resultat:

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

Som förväntat, type fältet har returnerats utan blanksteg i början. Det blanka utrymmet i slutet finns fortfarande kvar.

Du kan också använda $rtrim operatorn för att trimma den högra delen av strängen och $trim operatör för att trimma båda sidor av strängen.

Det finns en hel del tecken som MongoDB anser vara blanksteg. Se MongoDB Whitespace-tecken för en fullständig lista.

Trimma andra tecken

$ltrim operatören accepterar en chars parameter som låter dig specificera vilka tecken som ska trimmas.

Exempel:

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

Resultat:

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

I det här fallet inkluderade vi chars parameter med bindestreck (- ), vilket resulterade i att bindestrecket togs bort från början av ordet.

Trim flera tecken

Du kan trimma flera tecken genom att inkludera alla i chars argument.

Exempel:

db.pets.aggregate([
  { 
    $project: { 
      name: { $ltrim: { input: "$name", chars: "W-" } } 
    } 
  }
])

Resultat:

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

I det här fallet angav jag två tecken som mina chars argument, och två av dessa tecken råkade vara i början av strängen. Därför trimmades dessa två karaktärer.

Var dock försiktig när du gör detta. Så här händer när jag inkluderar alla tecken:

db.pets.aggregate([
  { 
    $project: { 
      name: { $ltrim: { input: "$name", chars: "W-ag" } } 
    } 
  }
])

Resultat:

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

Hela strängen har försvunnit. Den har trimmat inte bara - och W från strängen, men den har också tagit bort a och g tecken.

Trimningsnummer

$ltrim operatören arbetar på strängar. Om vi ​​försöker trimma weight fältet får vi ett fel. Detta beror på att weight fältet är ett nummer, inte en sträng.

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

Resultat:

Error: command failed: {
	"ok" : 0,
	"errmsg" : "$ltrim 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

Felet talar om för oss att vi tillhandahållit en dubbel och att $ltrim operatorn kräver att dess inmatning är en sträng.

Om vi ​​verkligen ville ta bort 2:an måste vi först konvertera den till en sträng. Vi kan göra det med antingen $convert eller $toString operatör.

Exempel:

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

Resultat:

{ "_id" : 1, "name" : "-Wag", "weight" : "0" } 

Vi kan få tillbaka det till en dubbel genom att använda antingen $convert eller $toDouble operatör.

Fullständigt exempel:

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

Resultat:

{ "_id" : 1, "name" : "-Wag", "weight" : 0 }

  1. Inbäddat dokument utan Array?

  2. Styre:Åtkomst har nekats att lösa egendomen från eftersom det inte är en egen egendom för sin förälder

  3. Mongoose lösenord hashing

  4. Summa i kapslat dokument MongoDB