sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $strLenBytes

MongoDB, $strLenBytes aggregeringspipeline-operatören returnerar antalet UTF-8-kodade byte i den angivna strängen.

Varje tecken i en sträng kan innehålla olika antal byte, beroende på vilket tecken som används. $strLenBytes operatorn kan räkna ut hur många byte varje tecken innehåller och returnera det korrekta resultatet för hela strängen.

Exempel

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

{ "_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 använda $strLenBytes till datafältet i dessa dokument:

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 att hela ordet är 8 byte och varje tecken är 1 byte vardera.

Thailändska tecken

Här är ett exempel som använder thailändska tecken, som är 3 byte vardera.

Vi har en samling som heter thai med följande dokument:

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

Och här är vad som händer när vi använder $strLenBytes till dessa dokument:

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" :" ง", "result" :3 }

Två av dessa tecken har modifierats med diakritiska tecken, vilket resulterar i att 6 byte returneras.

Andra tecken

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

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

Och låt oss tillämpa $strLenBytes till dessa dokument:

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 två första tecknen är 2 byte och det tredje är 3 byte. Antalet byte beror på tecknet. Vissa tecken kan använda 4 byte.

Mellanslagstecknet använder en byte. Två blanksteg använder därför 2 byte, och så vidare.

Anta att vi har följande dokument:

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

Och vi tillämpar $strLenBytes till dessa dokument:

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

Resultat:

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

Tömma strängar

Tomma strängar returnerar 0 .

Här är ett dokument med en tom sträng:

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

Och här är vad som händer när vi använder $strLenBytes till det dokumentet:

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

Resultat:

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

Fel datatyp

Att skicka fel datatyp resulterar i ett fel.

Anta att vi har följande dokument:

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

Data field innehåller ett nummer.

Låt oss tillämpa $strLenBytes till det dokumentet:

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

Resultat:

Fel:kommando misslyckades:{ "ok" :0, "errmsg" :"$strLenBytes kräver ett strängargument, hittade:dubbel", "code" :34473, "codeName" :"Location34473"} :aggregering misslyckades :[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

Nullvärden

Tillhandahåller null resulterar också i ett fel.

Anta att vi har följande dokument:

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

Data field innehåller null .

Låt oss tillämpa $strLenBytes till det dokumentet:

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

Resultat:

oupptäckt undantag:Fel:kommando misslyckades:{ "ok" :0, "errmsg" :"$strLenBytes kräver ett strängargument, hittat:null", "code" :34473, "codeName" :"Location34473"} :sammanställning misslyckades :[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

Fält saknas

Att fortsätta med temat att skapa fel, att specificera ett icke-existerande fält ger också ett fel.

Dokument:

{ "_id" :9 }

Använd $strLenBytes :

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

Resultat:

Fel:kommando misslyckades:{ "ok" :0, "errmsg" :"$strLenBytes kräver ett strängargument, hittades:saknas", "code" :34473, "codeName" :"Location34473"} :aggregering misslyckades :[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. logga alla frågor som mangust eldar i programmet

  2. Hur man exporterar MongoDB-frågeresultat till en CSV-fil

  3. För loop in redis med nodejs asynkrona förfrågningar

  4. Redis sentinel vs clustering