MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB $strLenCP

MongoDB, $strLenCP Операторът на конвейера за агрегиране връща броя на кодовите точки UTF-8 в посочения низ.

$strLenCP операторът е различен от $strLenBytes оператор, който връща броя на байтовете в низа.

Пример

Да предположим, че имаме колекция, наречена english със следните документи:

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

Можем да приложим $strLenCP към полето за данни в тези документи:

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

Резултат:

{ "data" :"Maimuang", "result" :8 }{ "data" :"M", "result" :1 }{ "data" :"a", "result" :1 }{ " данни" :"i", "резултат" :1 }{ "данни" :"m", "резултат" :1 }{ "данни" :"u", "резултат" :1 }{ "данни" :"a ", "резултат" :1 }{ "данни" :"n", "резултат" :1 }{ "данни" :"g", "резултат" :1 }

Можем да видим, че цялата дума използва 8 кодови точки и всеки знак използва една кодова точка.

Тайландски знаци

Ето пример, който използва тайландски знаци, които са по 3 байта всеки, но използват само една кодова точка.

Имаме колекция, наречена thai със следните документи:

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

И ето какво се случва, когато приложим $strLenCP към тези документи:

db.thai.aggregate( [ { $project:{ _id:0, данни:1, резултат:{ $strLenCP:"$data" } } ])

Резултат:

{ "данни" :"ไม้เมือง", "резултат" :8 }{ "данни" :"ไ", "резултат" :1 }{ "данни" :"ม้", "резултат" :2 }{ "данни" :"เ", "резултат" :1 }{ "данни" :"มื", "резултат" :2 }{ "данни" :"อ", "резултат" :1 }{ "данни" :" ง", "резултат" :1 }

Два от тези знака са променени с помощта на диакритика, което води до връщане на 2 кодови точки. Тези знаци връщат 6 байта при използване на $strLenBytes оператор.

Други символи

Да предположим, че имаме колекция, наречена other със следните документи:

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

И нека приложим $strLenCP към тези документи:

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

Резултат:

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

Всеки от тези знаци използва една кодова точка (въпреки че такива знаци използват повече от един байт).

Знакът за интервал използва кодова точка. Следователно два знака за интервал използват 2 кодови точки и т.н.

Да предположим, че имаме следните документи:

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

И ние прилагаме $strLenCP към тези документи:

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

Резултат:

{ "данни" :" ", "резултат" :1 }{ "данни" :" ", "резултат" :2 }

Празни низове

Празните низове връщат 0 .

Ето документ с празен низ:

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

И ето какво се случва, когато приложим $strLenCP към този документ:

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

Резултат:

{ "данни" :"", "резултат" :0 }

Грешен тип данни

Предаването на грешен тип данни води до грешка.

Да предположим, че имаме следния документ:

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

Данните field съдържа число.

Нека приложим $strLenCP към този документ:

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

Резултат:

неуловено изключение:Грешка:командата е неуспешна:{ "ok" :0, "errmsg" :"$strLenCP изисква низов аргумент, намерен:double", "code" :34471, "codeName" :"Location34471"} :неуспешен агрегат :[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 @(обвивка):1:1

Нулеви стойности

Предоставяне на null също води до грешка.

Да предположим, че имаме следния документ:

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

Данните field съдържа null .

Нека приложим $strLenCP към този документ:

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

Резултат:

Грешка:командата е неуспешна:{ "ok" :0, "errmsg" :"$strLenCP изисква низов аргумент, намерен:null", "code" :34471, "codeName" :"Location34471"} :неуспешен агрегат:[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

Липсващи полета

Продължавайки с темата за генериране на грешки, посочването на несъществуващо поле също води до грешка.

Документ:

{ "_id" :9 }

Приложете $strLenCP :

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

Резултат:

Грешка:команда неуспешна:{ "ok" :0, "errmsg" :"$strLenCP изисква низов аргумент, намерен:липсва", "код" :34471, "codeName" :"Location34471"} :агрегатът неуспешен:[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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Първият MongoDB хостинг DBaaS в подкрепа на Azure Government за публичния сектор

  2. MongoDB $atan2

  3. Почивка на данните за стартиране на Spring Boot, ограничението @Notnull не работи

  4. Mongo – Игнорирайте собствеността, за да не бъде запазена

  5. Как да изключите от резултатите от търсенето документи с полета, които не присъстват в заявката?