MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $strLenBytes

MongoDB, die $strLenBytes Der Aggregations-Pipeline-Operator gibt die Anzahl der UTF-8-codierten Bytes in der angegebenen Zeichenfolge zurück.

Jedes Zeichen in einer Zeichenfolge kann je nach verwendetem Zeichen eine unterschiedliche Anzahl von Bytes enthalten. Die $strLenBytes Der Operator kann herausfinden, wie viele Bytes jedes Zeichen enthält, und das richtige Ergebnis für die gesamte Zeichenfolge zurückgeben.

Beispiel

Angenommen, wir haben eine Sammlung namens english mit folgenden Dokumenten:

{ "_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, "Daten" :"a" }{ "_id" :8, "Daten" :"n" }{ "_id" :9, "Daten" :"g" }

Wir können $strLenBytes anwenden zum Datenfeld in diesen Dokumenten:

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

Ergebnis:

{ "Daten" :"Maimuang", "Ergebnis" :8 }{ "Daten" :"M", "Ergebnis" :1 }{ "Daten" :"a", "Ergebnis" :1 }{ " data“ :„i“, „result“ :1 }{ „data“ :„m“, „result“ :1 }{ „data“ :„u“, „result“ :1 }{ „data“ :„a ", "Ergebnis" :1 }{ "Daten" :"n", "Ergebnis" :1 }{ "Daten" :"g", "Ergebnis" :1 }

Wir können sehen, dass das ganze Wort 8 Byte groß ist und jedes Zeichen 1 Byte groß ist.

Thailändische Schriftzeichen

Hier ist ein Beispiel, das thailändische Zeichen verwendet, die jeweils 3 Bytes groß sind.

Wir haben eine Sammlung namens thai mit folgenden Dokumenten:

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

Und das passiert, wenn wir $strLenBytes anwenden zu diesen Dokumenten:

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

Ergebnis:

{ "data" :"ไม้เมือง", "result" :24 }{ "data" :"ไ", "result" :3 }{ "data" :"ม้", "result" :6 }{ „Daten“ :„เ“, „Ergebnis“ :3 }{ „Daten“ :„มื“, „Ergebnis“ :6 }{ „Daten“ :„อ“, „Ergebnis“ :3 }{ „Daten“ :„ §", "Ergebnis" :3 }

Zwei dieser Zeichen wurden mit diakritischen Zeichen modifiziert, was dazu führt, dass 6 Bytes zurückgegeben werden.

Andere Charaktere

Angenommen, wir haben eine Sammlung namens other mit folgenden Dokumenten:

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

Und wenden wir $strLenBytes an zu diesen Dokumenten:

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

Ergebnis:

{ "Daten" :"é", "Ergebnis" :2 }{ "Daten" :"©", "Ergebnis" :2 }{ "Daten" :"℘", "Ergebnis" :3 } 

Die ersten beiden Zeichen sind 2 Bytes und das dritte 3 Bytes. Die Anzahl der Bytes hängt vom Zeichen ab. Einige Zeichen können 4 Bytes verwenden.

Das Leerzeichen verwendet ein Byte. Zwei Leerzeichen verbrauchen also 2 Bytes usw.

Angenommen, wir haben die folgenden Dokumente:

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

Und wir wenden $strLenBytes an zu diesen Dokumenten:

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

Ergebnis:

{ "Daten" :" ", "Ergebnis" :1 }{ "Daten" :" ", "Ergebnis" :2 }

Leere Zeichenfolgen

Leere Strings geben 0 zurück .

Hier ist ein Dokument mit einer leeren Zeichenfolge:

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

Und das passiert, wenn wir $strLenBytes anwenden zu diesem Dokument:

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

Ergebnis:

{ "Daten" :"", "Ergebnis" :0 }

Falscher Datentyp

Das Übergeben des falschen Datentyps führt zu einem Fehler.

Angenommen, wir haben das folgende Dokument:

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

Das Datenfeld field enthält eine Zahl.

Wenden wir $strLenBytes an zu diesem Dokument:

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

Ergebnis:

Fehler:Befehl fehlgeschlagen:{ "ok" :0, "errmsg" :"$strLenBytes erfordert ein String-Argument, gefunden:double", "code" :34473, "codeName" :"Location34473"} :Aggregat fehlgeschlagen :[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

Nullwerte

Bereitstellung von null führt ebenfalls zu einem Fehler.

Angenommen, wir haben das folgende Dokument:

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

Das Datenfeld field enthält null .

Wenden wir $strLenBytes an zu diesem Dokument:

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

Ergebnis:

nicht erfasste Ausnahme:Fehler:Befehl fehlgeschlagen:{ "ok" :0, "errmsg" :"$strLenBytes erfordert ein Zeichenfolgenargument, gefunden:null", "code" :34473, "codeName" :"Location34473"} :Aggregat fehlgeschlagen :[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 @(Schale):1:1

Fehlende Felder

Um mit dem Thema der Erzeugung von Fehlern fortzufahren, die Angabe eines nicht vorhandenen Felds erzeugt ebenfalls einen Fehler.

Dokument:

{ "_id" :9 }

Wenden Sie $strLenBytes an :

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

Ergebnis:

Fehler:Befehl fehlgeschlagen:{ "ok" :0, "errmsg" :"$strLenBytes erfordert ein String-Argument, gefunden:fehlt", "code" :34473, "codeName" :"Location34473"} :Aggregat fehlgeschlagen :[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