Navigation
This version of the documentation is archived and no longer supported.

$strLenCP (aggregation)

On this page

Definition

$strLenCP

New in version 3.4.

Returns the number of UTF-8 code points in the specified string.

$strLenCP has the following operator expression syntax:

{ $strLenCP: <string expression> }

The argument can be any valid expression that resolves to a string.

If the argument resolves to a value of null or refers to a missing field, $strLenCP returns an error.

Example Results
{ $strLenCP: "abcde" } 5
{ $strLenCP: "Hello World!" } 12
{ $strLenCP: "cafeteria" } 9
{ $strLenCP: "cafétéria" } 9
{ $strLenCP: "" } 0
{ $strLenCP: "$€λA" } 4
{ $strLenCP: "寿司" } 2

Behavior

The $strLenCP operator counts the number of code points in the specified string. This behavior differs from the $strLenBytes operator that counts the number of bytes in the string, where each character uses between one and four bytes.

Example

Single-Byte and Multibyte Character Set

Create a food collection:

db.food.insertMany( [
   { _id: 1, name: "apple" },
   { _id: 2, name: "banana" },
   { _id: 3, name: "éclair" },
   { _id: 4, name: "hamburger" },
   { _id: 5, name: "jalapeño" },
   { _id: 6, name: "pizza" },
   { _id: 7, name: "tacos" },
   { _id: 8, name: "寿司" }
] )

The following example uses the $strLenCP operator to calculate the length of each name value:

db.food.aggregate( [
   {
      $project: {
         name: 1,
         length: { $strLenCP: "$name" }
      }
   }
] )

Example output:

[
   { _id: 1, name: 'apple', length: 5 },
   { _id: 2, name: 'banana', length: 6 },
   { _id: 3, name: 'éclair', length: 6 },
   { _id: 4, name: 'hamburger', length: 9 },
   { _id: 5, name: 'jalapeño', length: 8 },
   { _id: 6, name: 'pizza', length: 5 },
   { _id: 7, name: 'tacos', length: 5 },
   { _id: 8, name: '寿司', length: 2 }
]

See also

$strLenBytes