MongoDB, $strLenCP aggregeringspipeline-operatören returnerar antalet UTF-8-kodpunkter i den angivna strängen.
$strLenCP operatorn skiljer sig från $strLenBytes operator, som returnerar antalet byte i strängen.
Exempel
Anta att vi har en samling som heter english med följande dokument:
{ "_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" }
Vi kan använda $strLenCP till datafältet i dessa dokument:
db.english.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
) Resultat:
{ "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 } Vi kan se att hela ordet använder 8 kodpunkter och varje tecken använder en kodpunkt.
Thailändska tecken
Här är ett exempel som använder thailändska tecken, som är 3 byte vardera, men använder bara en kodpunkt.
Vi har en samling som heter thai med följande dokument:
{ "_id" :1, "data" :"ไม้เมือง" }{ "_id" :2, "data" :"ไ" }{ "_id" :3, "data" :"ม้" }{ "_id" :4, "data" :"เ" }{ "_id" :5, "data" :"มื" }{ "_id" :6, "data" :"อ" }{ "_id" :7 , "data" :"ง" }
Och här är vad som händer när vi använder $strLenCP till dessa dokument:
db.thai.aggregate( [ { $project:{ _id:0, data:1, result:{ $strLenCP:"$data" } } ]) Resultat:
{ "data" :"ไม้เมือง", "result" :8 }{ "data" :"ไ", "result" :1 }{ "data" :"ม้", "result" :2 }{ "data" :"เ", "result" :1 }{ "data" :"มื", "result" :2 }{ "data" :"อ", "result" :1 }{ "data" :" ง", "result" :1 }
Två av dessa tecken har modifierats med diakritiska tecken, vilket resulterar i att 2 kodpunkter returneras. Dessa tecken returnerar 6 byte när du använder $strLenBytes operatör.
Andra tecken
Anta att vi har en samling som heter other med följande dokument:
{ "_id" :1, "data" :"é" }{ "_id" :2, "data" :"©" }{ "_id" :3, "data" :"℘" }
Och låt oss tillämpa $strLenCP till dessa dokument:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
Resultat:
{ "data" :"é", "result" :1 }{ "data" :"©", "result" :1 }{ "data" :"℘", "result" :1 }
Vart och ett av dessa tecken använder en enda kodpunkt (även om sådana tecken använder mer än en byte).
Mellanslagstecknet använder en kodpunkt. Två blanksteg använder därför 2 kodpunkter och så vidare.
Anta att vi har följande dokument:
{ "_id" :4, "data" :" " }{ "_id" :5, "data" :" " }
Och vi tillämpar $strLenCP till dessa dokument:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 4, 5 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
Resultat:
{ "data" :" ", "result" :1 }{ "data" :" ", "result" :2 } Tömma strängar
Tomma strängar returnerar 0 .
Här är ett dokument med en tom sträng:
{ "_id" :6, "data" :"" }
Och här är vad som händer när vi använder $strLenCP till det dokumentet:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 6 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
Resultat:
{ "data" :"", "result" :0 } Fel datatyp
Att skicka fel datatyp resulterar i ett fel.
Anta att vi har följande dokument:
{ "_id" :7, "data" :123 }
Data field innehåller ett nummer.
Låt oss tillämpa $strLenCP till det dokumentet:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 7 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
Resultat:
oupptäckt undantag:Fel:kommando misslyckades:{ "ok" :0, "errmsg" :"$strLenCP kräver ett strängargument, hittat:dubbel", "code" :34471, "codeName" :"Location34471"} :sammanställning misslyckades :example@sqldat.com/mongo/shell/utils.js:25:13example@sqldat.com/mongo/shell/assert.js:18:14example@sqldat.com/mongo/shell/assert.js:639 :17example@sqldat.com/mongo/shell/assert.js:729:16example@sqldat.com/mongo/shell/db.js:266:5example@sqldat.com/mongo/shell/collection.js:1058:12 @(skal):1:1 Nullvärden
Tillhandahåller null resulterar också i ett fel.
Anta att vi har följande dokument:
{ "_id" :8, "data" :null }
Data field innehåller null .
Låt oss tillämpa $strLenCP till det dokumentet:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 8 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
Resultat:
Fel:kommando misslyckades:{ "ok" :0, "errmsg" :"$strLenCP kräver ett strängargument, hittat:null", "code" :34471, "codeName" :"Location34471"} :aggregering misslyckades :example@sqldat.com/mongo/shell/utils.js:25:13example@sqldat.com/mongo/shell/assert.js:18:14example@sqldat.com/mongo/shell/assert.js:639:17example@ sqldat.com/mongo/shell/assert.js:729:16example@sqldat.com/mongo/shell/db.js:266:5example@sqldat.com/mongo/shell/collection.js:1058:12@(shell ):1:1 Fält saknas
Att fortsätta med temat att skapa fel, att specificera ett icke-existerande fält ger också ett fel.
Dokument:
{ "_id" :9 }
Använd $strLenCP :
db.other.aggregate(
[
{ $match: { _id: { $in: [ 9 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenCP: "$data" }
}
}
]
)
Resultat:
Fel:kommando misslyckades:{ "ok" :0, "errmsg" :"$strLenCP kräver ett strängargument, hittades:saknas", "code" :34471, "codeName" :"Location34471"} :aggregering misslyckades :example@sqldat.com/mongo/shell/utils.js:25:13example@sqldat.com/mongo/shell/assert.js:18:14example@sqldat.com/mongo/shell/assert.js:639:17example@ sqldat.com/mongo/shell/assert.js:729:16example@sqldat.com/mongo/shell/db.js:266:5example@sqldat.com/mongo/shell/collection.js:1058:12@(shell ):1:1