sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $strLenCP

MongoDB, $strLenCP operátor agregačního kanálu vrátí počet bodů kódu UTF-8 v zadaném řetězci.

$strLenCP operátor se liší od $strLenBytes operátor, který vrací počet bajtů v řetězci.

Příklad

Předpokládejme, že máme kolekci nazvanou english s následujícími dokumenty:

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

Můžeme použít $strLenCP do datového pole v těchto dokumentech:

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

Výsledek:

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

Vidíme, že celé slovo používá 8 kódových bodů a každý znak používá jeden kódový bod.

Thajské znaky

Zde je příklad, který používá thajské znaky, které mají každý 3 bajty, ale používají pouze jeden kód.

Máme kolekci nazvanou thai s následujícími dokumenty:

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

A co se stane, když použijeme $strLenCP k těm dokumentům:

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

Výsledek:

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

Dva z těchto znaků byly upraveny pomocí diakritiky, což má za následek vrácení 2 bodů kódu. Tyto znaky vrátí 6 bajtů při použití $strLenBytes operátor.

Další postavy

Předpokládejme, že máme kolekci nazvanou other s následujícími dokumenty:

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

A použijeme $strLenCP k těm dokumentům:

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

Výsledek:

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

Každý z těchto znaků používá jeden kódový bod (i když takové znaky používají více než jeden bajt).

Znak mezery používá bod kódu. Dva znaky mezery proto používají 2 kódové body atd.

Předpokládejme, že máme následující dokumenty:

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

A použijeme $strLenCP k těm dokumentům:

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

Výsledek:

{ "data" :" ", "výsledek" :1 }{ "data" :" ", "výsledek" :2 }

Prázdné řetězce

Prázdné řetězce vrátí 0 .

Zde je dokument s prázdným řetězcem:

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

A co se stane, když použijeme $strLenCP k tomuto dokumentu:

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

Výsledek:

{ "data" :"", "výsledek" :0 }

Nesprávný datový typ

Předání nesprávného datového typu vede k chybě.

Předpokládejme, že máme následující dokument:

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

field dat obsahuje číslo.

Aplikujme $strLenCP k tomuto dokumentu:

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

Výsledek:

nezachycená výjimka:Chyba:příkaz se nezdařil:{ "ok" :0, "errmsg" :"$strLenCP vyžaduje argument řetězce, nalezeno:double", "code" :34471, "codeName" :"Location34471"} :agregace selhala :[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

Nulové hodnoty

Poskytování null také vede k chybě.

Předpokládejme, že máme následující dokument:

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

field dat obsahuje null .

Aplikujme $strLenCP k tomuto dokumentu:

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

Výsledek:

Chyba:příkaz se nezdařil:{ "ok" :0, "errmsg" :"$strLenCP vyžaduje argument řetězce, nalezeno:null", "code" :34471, "codeName" :"Location34471"} :agregace se nezdařila:[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

Chybějící pole

Pokračujeme v tématu vytváření chyb a zadání neexistujícího pole také způsobí chybu.

Dokument:

{ "_id" :9 }

Použijte $strLenCP :

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

Výsledek:

Chyba:příkaz se nezdařil:{ "ok" :0, "errmsg" :"$strLenCP vyžaduje argument řetězce, nalezeno:chybí", "code" :34471, "codeName" :"Location34471"} :agregace selhala :[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. Mongodb sečte velikost polí pole

  2. Lze mongodb použít jako vestavěnou databázi?

  3. Optimalizace souběžných požadavků ImageMagick pomocí redis/php-resque

  4. Jak číst více sad uložených na Redis pomocí nějakého příkazu nebo skriptu LUA