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

MongoDB $strLenBytes

MongoDB, $strLenBytes aggregeringspipeline-operatør returnerer antallet af UTF-8-kodede bytes i den angivne streng.

Hvert tegn i en streng kan indeholde et forskelligt antal bytes, afhængigt af det anvendte tegn. $strLenBytes operatør kan finde ud af, hvor mange bytes hvert tegn indeholder og returnere det korrekte resultat for hele strengen.

Eksempel

Antag, at vi har en samling kaldet english med følgende dokumenter:

{ "_id" :1, "data" :"Maimuang" }{ "_id" :2, "data" :"M" }{ "_id" :3, "data" :"a" }{ " _id" :4, "data" :"i" }{ "_id" :5, "data" :"m" }{ "_id" :6, "data" :"u" }{ "_id" :7, "data" :"a" }{ "_id" :8, "data" :"n" }{ "_id" :9, "data" :"g" }

Vi kan anvende $strLenBytes til datafeltet i disse dokumenter:

db.english.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$data" }
          }
     }
   ]
) 

Resultat:

{ "data" :"Maimuang", "result" :8 }{ "data" :"M", "result" :1 }{ "data" :"a", "result" :1 }{ " data" :"i", "result" :1 }{ "data" :"m", "result" :1 }{ "data" :"u", "result" :1 }{ "data" :"a ", "result" :1 }{ "data" :"n", "result" :1 }{ "data" :"g", "result" :1 }

Vi kan se, at hele ordet er 8 bytes, og hvert tegn er 1 byte hver.

Thaiske tegn

Her er et eksempel, der bruger thailandske tegn, som hver er på 3 bytes.

Vi har en samling kaldet thai med følgende dokumenter:

{ "_id" :1, "data" :"ไม้เมือง" }{ "_id" :2, "data" :"ไ" }{ "_id" :3, "data" :"ม้" }{ "_id" :4, "data" :"เ" }{ "_id" :5, "data" :"มื" }{ "_id" :6, "data" :"อ" }{ "_id" :7 , "data" :"ง" }

Og her er, hvad der sker, når vi anvender $strLenBytes til disse dokumenter:

db.thai.aggregate( [ { $project:{ _id:0, data:1, result:{ $strLenBytes:"$data" } } ])

Resultat:

{ "data" :"ไม้เมือง", "result" :24 }{ "data" :"ไ", "result" :3 }{ "data" :"ม้", "result" :6 }{ "data" :"เ", "result" :3 }{ "data" :"มื", "result" :6 }{ "data" :"อ", "result" :3 }{ "data" :" ง", "resultat" :3 }

To af disse tegn er blevet ændret ved hjælp af diakritiske tegn, hvilket resulterer i, at 6 bytes returneres.

Andre tegn

Antag, at vi har en samling kaldet other med følgende dokumenter:

{ "_id" :1, "data" :"é" }{ "_id" :2, "data" :"©" }{ "_id" :3, "data" :"℘" } 

Og lad os anvende $strLenBytes til disse dokumenter:

db.other.aggregate(
   [
     { $match: { _id: { $in: [ 1, 2, 3 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$data" }
          }
     }
   ]
) 

Resultat:

{ "data" :"é", "result" :2 }{ "data" :"©", "result" :2 }{ "data" :"℘", "result" :3 } 

De første to tegn er 2 bytes og det tredje er 3 bytes. Antallet af bytes afhænger af tegnet. Nogle tegn kan bruge 4 bytes.

Mellemrumstegnet bruger en byte. To mellemrumstegn bruger derfor 2 bytes, og så videre.

Antag, at vi har følgende dokumenter:

{ "_id" :4, "data" :" " }{ "_id" :5, "data" :" " }

Og vi anvender $strLenBytes til disse dokumenter:

db.other.aggregate(
   [
     { $match: { _id: { $in: [ 4, 5 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$data" }
          }
     }
   ]
) 

Resultat:

{ "data" :" ", "result" :1 }{ "data" :" ", "result" :2 }

Tomme strenge

Tomme strenge returnerer 0 .

Her er et dokument med en tom streng:

{ "_id" :6, "data" :"" }

Og her er, hvad der sker, når vi anvender $strLenBytes til det dokument:

db.other.aggregate(
   [
     { $match: { _id: { $in: [ 6 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$data" }
          }
     }
   ]
) 

Resultat:

{ "data" :"", "result" :0 }

Forkert datatype

Sender den forkerte datatype, resulterer det i en fejl.

Antag, at vi har følgende dokument:

{ "_id" :7, "data" :123 }

Data field indeholder et tal.

Lad os anvende $strLenBytes til det dokument:

db.other.aggregate(
   [
     { $match: { _id: { $in: [ 7 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$data" }
          }
     }
   ]
) 

Resultat:

Fejl:kommando mislykkedes:{ "ok" :0, "errmsg" :"$strLenBytes kræver et strengargument, fundet:double", "code" :34473, "codeName" :"Location34473"} :aggregering mislykkedes :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert.js:639:17example@ sqldat.com/mongo/shell/assert.js:729:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1058:12@(shell ):1:1

Nul-værdier

Giver null resulterer også i en fejl.

Antag, at vi har følgende dokument:

{ "_id" :8, "data" :null }

Data field indeholder null .

Lad os anvende $strLenBytes til det dokument:

db.other.aggregate(
   [
     { $match: { _id: { $in: [ 8 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$data" }
          }
     }
   ]
) 

Resultat:

ufanget undtagelse:Fejl:kommando mislykkedes:{ "ok" :0, "errmsg" :"$strLenBytes kræver et string-argument, fundet:null", "code" :34473, "codeName" :"Location34473"} :sammenlægning mislykkedes :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert.js:639 :[email protected]/mongo/shell/assert.js:729:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1058:12 @(skal):1:1

Manglende felter

Hvis du fortsætter med temaet om at producere fejl, giver det også en fejl at angive et ikke-eksisterende felt.

Dokument:

{ "_id" :9 }

Anvend $strLenBytes :

db.other.aggregate(
   [
     { $match: { _id: { $in: [ 9 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenBytes: "$data" }
          }
     }
   ]
) 

Resultat:

Fejl:kommando mislykkedes:{ "ok" :0, "errmsg" :"$strLenBytes kræver et string-argument, fundet:mangler", "code" :34473, "codeName" :"Location34473"} :aggregering mislykkedes :[email protected]/mongo/shell/utils.js:25:[email protected]/mongo/shell/assert.js:18:[email protected]/mongo/shell/assert.js:639:17example@ sqldat.com/mongo/shell/assert.js:729:[email protected]/mongo/shell/db.js:266:[email protected]/mongo/shell/collection.js:1058:12@(shell ):1:1

  1. Hvorfor har vi brug for, hvilke fordele at bruge mongoose

  2. Redis vs. MongoDB:Sammenligning af In-Memory-databaser med Percona Memory Engine

  3. gke kan ikke deaktivere Transparent Huge Pages... tilladelse nægtet

  4. Brug cases til updateOne over findOneAndUpdate i MongoDB