MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB $strLenBytes

MongoDB, le $strLenBytes L'opérateur de pipeline d'agrégation renvoie le nombre d'octets encodés en UTF-8 dans la chaîne spécifiée.

Chaque caractère d'une chaîne peut contenir un nombre différent d'octets, selon le caractère utilisé. Le $strLenBytes l'opérateur peut déterminer le nombre d'octets que contient chaque caractère et renvoyer le résultat correct pour toute la chaîne.

Exemple

Supposons que nous ayons une collection appelée english avec les documents suivants :

{ "_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" }

Nous pouvons appliquer $strLenBytes au champ de données dans ces documents :

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

Résultat :

{ "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 }

Nous pouvons voir que le mot entier est de 8 octets et chaque caractère est de 1 octet chacun.

Caractères thaïlandais

Voici un exemple qui utilise des caractères thaïlandais, qui font 3 octets chacun.

Nous avons une collection appelée thai avec les documents suivants :

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

Et voici ce qui se passe lorsque nous appliquons $strLenBytes à ces documents :

db.thai.aggregate( [ { $project :{ _id :0, données :1, résultat :{ $strLenBytes :"$data" } } } ])

Résultat :

{ "data" :"ไม้เมือง", "result" :24 }{ "data" :"ไ", "result" :3 }{ "data" :"ม้", "result" :6 }{ "data" :"เ", "result" :3 }{ "data" :"มื", "result" :6 }{ "data" :"อ", "result" :3 }{ "data" :" §", "résultat" :3 }

Deux de ces caractères ont été modifiés à l'aide de signes diacritiques, ce qui entraîne le retour de 6 octets.

Autres personnages

Supposons que nous ayons une collection appelée other avec les documents suivants :

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

Et appliquons $strLenBytes à ces documents :

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

Résultat :

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

Les deux premiers caractères font 2 octets et le troisième 3 octets. Le nombre d'octets dépend du caractère. Certains caractères peuvent utiliser 4 octets.

Le caractère espace utilise un octet. Deux caractères espace utilisent donc 2 octets, et ainsi de suite.

Supposons que nous ayons les documents suivants :

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

Et nous appliquons $strLenBytes à ces documents :

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

Résultat :

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

Chaînes vides

Les chaînes vides renvoient 0 .

Voici un document avec une chaîne vide :

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

Et voici ce qui se passe lorsque nous appliquons $strLenBytes à ce document :

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

Résultat :

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

Type de données incorrect

Passer le mauvais type de données entraîne une erreur.

Supposons que nous ayons le document suivant :

{ "_id" :7, "données" :123 }

Le champ de données field contient un nombre.

Appliquons $strLenBytes à ce document :

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

Résultat :

Erreur :échec de la commande :{ "ok" :0, "errmsg" :"$strLenBytes nécessite un argument de chaîne, trouvé :double", "code" :34473, "codeName" :"Location34473"} :échec de l'agrégat :[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

Valeurs nulles

Fournir null entraîne également une erreur.

Supposons que nous ayons le document suivant :

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

Le champ de données field contient null .

Appliquons $strLenBytes à ce document :

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

Résultat :

exception non interceptée :erreur :échec de la commande :{ "ok" :0, "errmsg" :"$strLenBytes nécessite un argument de chaîne, trouvé :null", "code" :34473, "codeName" :"Location34473"} :l'agrégat a échoué :[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 @(shell):1:1

Champs manquants

En continuant avec le thème de la production d'erreurs, la spécification d'un champ inexistant produit également une erreur.

Documents :

{ "_id" :9 }

Appliquer $strLenBytes :

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

Résultat :

Erreur :échec de la commande :{ "ok" :0, "errmsg" :"$strLenBytes nécessite un argument de chaîne, trouvé :manquant", "code" :34473, "codeName" :"Location34473"} :échec de l'agrégat :[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