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

MongoDB $strLenCP

MongoDB, le $strLenCP L'opérateur de pipeline d'agrégation renvoie le nombre de points de code UTF-8 dans la chaîne spécifiée.

Le $strLenCP l'opérateur est différent du $strLenBytes opérateur qui renvoie le nombre d'octets dans 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 $strLenCP au champ de données dans ces documents :

db.english.aggregate(
   [
     {
       $project:
          {
            _id: 0,
            data: 1,
            result: { $strLenCP: "$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 utilise 8 points de code et que chaque caractère utilise un point de code.

Caractères thaïlandais

Voici un exemple qui utilise des caractères thaïlandais, qui font 3 octets chacun, mais n'utilisent qu'un seul point de code.

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 $strLenCP à ces documents :

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

Résultat :

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

Deux de ces caractères ont été modifiés à l'aide de signes diacritiques, ce qui entraîne le renvoi de 2 points de code. Ces caractères renvoient 6 octets lors de l'utilisation de $strLenBytes opérateur.

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 $strLenCP à ces documents :

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

Résultat :

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

Chacun de ces caractères utilise un seul point de code (même si ces caractères utilisent plus d'un octet).

Le caractère espace utilise un point de code. Deux espaces utilisent donc 2 points de code, et ainsi de suite.

Supposons que nous ayons les documents suivants :

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

Et on applique $strLenCP à ces documents :

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

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

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

Résultat :

exception non détectée :erreur :échec de la commande :{ "ok" :0, "errmsg" :"$strLenCP nécessite un argument de chaîne, trouvé :double", "code" :34471, "codeName" :"Location34471"} :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

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 $strLenCP à ce document :

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

Résultat :

Erreur :échec de la commande :{ "ok" :0, "errmsg" :"$strLenCP requiert un argument de chaîne, trouvé :null", "code" :34471, "codeName" :"Location34471"} :é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

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

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

Résultat :

Erreur :échec de la commande :{ "ok" :0, "errmsg" :"$strLenCP requiert un argument de chaîne, trouvé :manquant", "code" :34471, "codeName" :"Location34471"} :é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