MongoDB, $strLenBytes aggregeringspipeline-operatören returnerar antalet UTF-8-kodade byte i den angivna strängen.
Varje tecken i en sträng kan innehålla olika antal byte, beroende på vilket tecken som används. $strLenBytes operatorn kan räkna ut hur många byte varje tecken innehåller och returnera det korrekta resultatet för hela 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 $strLenBytes till datafältet i dessa dokument:
db.english.aggregate(
[
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$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 är 8 byte och varje tecken är 1 byte vardera.
Thailändska tecken
Här är ett exempel som använder thailändska tecken, som är 3 byte vardera.
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 $strLenBytes till dessa dokument:
db.thai.aggregate( [ { $project:{ _id:0, data:1, result:{ $strLenBytes:"$data" } } ]) Resultat:
{ "data" :"ไม้เมือง", "result" :24 }{ "data" :"ไ", "result" :3 }{ "data" :"ม้", "result" :6 }{ "data" :"เ", "result" :3 }{ "data" :"มื", "result" :6 }{ "data" :"อ", "result" :3 }{ "data" :" ง", "result" :3 } Två av dessa tecken har modifierats med diakritiska tecken, vilket resulterar i att 6 byte returneras.
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 $strLenBytes till dessa dokument:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$data" }
}
}
]
)
Resultat:
{ "data" :"é", "result" :2 }{ "data" :"©", "result" :2 }{ "data" :"℘", "result" :3 }
De två första tecknen är 2 byte och det tredje är 3 byte. Antalet byte beror på tecknet. Vissa tecken kan använda 4 byte.
Mellanslagstecknet använder en byte. Två blanksteg använder därför 2 byte, och så vidare.
Anta att vi har följande dokument:
{ "_id" :4, "data" :" " }{ "_id" :5, "data" :" " }
Och vi tillämpar $strLenBytes till dessa dokument:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 4, 5 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$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 $strLenBytes till det dokumentet:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 6 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$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 $strLenBytes till det dokumentet:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 7 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$data" }
}
}
]
)
Resultat:
Fel:kommando misslyckades:{ "ok" :0, "errmsg" :"$strLenBytes kräver ett strängargument, hittade:dubbel", "code" :34473, "codeName" :"Location34473"} :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 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 $strLenBytes till det dokumentet:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 8 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$data" }
}
}
]
)
Resultat:
oupptäckt undantag:Fel:kommando misslyckades:{ "ok" :0, "errmsg" :"$strLenBytes kräver ett strängargument, hittat:null", "code" :34473, "codeName" :"Location34473"} :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 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 $strLenBytes :
db.other.aggregate(
[
{ $match: { _id: { $in: [ 9 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$data" }
}
}
]
)
Resultat:
Fel:kommando misslyckades:{ "ok" :0, "errmsg" :"$strLenBytes kräver ett strängargument, hittades:saknas", "code" :34473, "codeName" :"Location34473"} :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