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

MongoDB $strLenCP

MongoDB, $strLenCP aggregeringspipeline-operatør returnerer antallet af UTF-8-kodepunkter i den angivne streng.

$strLenCP operatoren er forskellig fra $strLenBytes operator, som returnerer antallet af bytes i 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 $strLenCP til datafeltet i disse dokumenter:

db.english.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenCP: "$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 bruger 8 kodepunkter, og hvert tegn bruger et kodepunkt.

Thaiske tegn

Her er et eksempel, der bruger thailandske tegn, som hver er 3 bytes, men kun bruger ét kodepunkt.

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 $strLenCP til disse dokumenter:

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

Resultat:

{ "data" :"ไม้เมือง", "result" :8 }{ "data" :"ไ", "result" :1 }{ "data" :"ม้", "result" :2 }{ "data" :"เ", "result" :1 }{ "data" :"มื", "result" :2 }{ "data" :"อ", "result" :1 }{ "data" :" ง", "result" :1 }

To af disse tegn er blevet ændret ved hjælp af diakritiske tegn, hvilket resulterer i, at 2 kodepunkter returneres. Disse tegn returnerer 6 bytes, når du bruger $strLenBytes operatør.

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 $strLenCP til disse dokumenter:

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

Resultat:

{ "data" :"é", "result" :1 }{ "data" :"©", "result" :1 }{ "data" :"℘", "result" :1 } 

Hvert af disse tegn bruger et enkelt kodepunkt (selvom sådanne tegn bruger mere end én byte).

Mellemrumstegnet bruger et kodepunkt. To mellemrumstegn bruger derfor 2 kodepunkter, og så videre.

Antag, at vi har følgende dokumenter:

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

Og vi anvender $strLenCP til disse dokumenter:

db.other.aggregate(
   [
     { $match: { _id: { $in: [ 4, 5 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenCP: "$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 $strLenCP til det dokument:

db.other.aggregate(
   [
     { $match: { _id: { $in: [ 6 ] } } },
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenCP: "$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 $strLenCP til det dokument:

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

Resultat:

ufanget undtagelse:Fejl:kommando mislykkedes:{ "ok" :0, "errmsg" :"$strLenCP kræver et strengargument, fundet:double", "code" :34471, "codeName" :"Location34471"} :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

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 $strLenCP til det dokument:

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

Resultat:

Fejl:kommando mislykkedes:{ "ok" :0, "errmsg" :"$strLenCP kræver et strengargument, fundet:null", "code" :34471, "codeName" :"Location34471"} :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

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 $strLenCP :

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

Resultat:

Fejl:kommando mislykkedes:{ "ok" :0, "errmsg" :"$strLenCP kræver et strengargument, fundet:mangler", "code" :34471, "codeName" :"Location34471"} :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. Redigo ScanStruct fejl med time.Time

  2. Spring Boot forbinder Mysql og MongoDb

  3. Ubehandlet løfteafvisning:Fejl:URL forkert udformet, kan ikke parses

  4. Hvordan ringer man til BGSAVE fra BookSleeve?