MongoDB, $strLenBytes aggregeringspipeline-operatør returnerer antallet af UTF-8-kodede bytes i den angivne streng.
Hvert tegn i en streng kan indeholde et forskelligt antal bytes, afhængigt af det anvendte tegn. $strLenBytes operatør kan finde ud af, hvor mange bytes hvert tegn indeholder og returnere det korrekte resultat for hele strengen.
Eksempel
Antag, at vi har en samling kaldet english med følgende dokumenter:
{ "_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 anvende $strLenBytes til datafeltet i disse dokumenter:
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, at hele ordet er 8 bytes, og hvert tegn er 1 byte hver.
Thaiske tegn
Her er et eksempel, der bruger thailandske tegn, som hver er på 3 bytes.
Vi har en samling kaldet thai med følgende dokumenter:
{ "_id" :1, "data" :"ไม้เมือง" }{ "_id" :2, "data" :"ไ" }{ "_id" :3, "data" :"ม้" }{ "_id" :4, "data" :"เ" }{ "_id" :5, "data" :"มื" }{ "_id" :6, "data" :"อ" }{ "_id" :7 , "data" :"ง" }
Og her er, hvad der sker, når vi anvender $strLenBytes til disse dokumenter:
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" :" ง", "resultat" :3 } To af disse tegn er blevet ændret ved hjælp af diakritiske tegn, hvilket resulterer i, at 6 bytes returneres.
Andre tegn
Antag, at vi har en samling kaldet other med følgende dokumenter:
{ "_id" :1, "data" :"é" }{ "_id" :2, "data" :"©" }{ "_id" :3, "data" :"℘" }
Og lad os anvende $strLenBytes til disse dokumenter:
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 første to tegn er 2 bytes og det tredje er 3 bytes. Antallet af bytes afhænger af tegnet. Nogle tegn kan bruge 4 bytes.
Mellemrumstegnet bruger en byte. To mellemrumstegn bruger derfor 2 bytes, og så videre.
Antag, at vi har følgende dokumenter:
{ "_id" :4, "data" :" " }{ "_id" :5, "data" :" " }
Og vi anvender $strLenBytes til disse dokumenter:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 4, 5 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$data" }
}
}
]
)
Resultat:
{ "data" :" ", "result" :1 }{ "data" :" ", "result" :2 } Tomme strenge
Tomme strenge returnerer 0 .
Her er et dokument med en tom streng:
{ "_id" :6, "data" :"" }
Og her er, hvad der sker, når vi anvender $strLenBytes til det dokument:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 6 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$data" }
}
}
]
)
Resultat:
{ "data" :"", "result" :0 } Forkert datatype
Sender den forkerte datatype, resulterer det i en fejl.
Antag, at vi har følgende dokument:
{ "_id" :7, "data" :123 }
Data field indeholder et tal.
Lad os anvende $strLenBytes til det dokument:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 7 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$data" }
}
}
]
)
Resultat:
Fejl:kommando mislykkedes:{ "ok" :0, "errmsg" :"$strLenBytes kræver et strengargument, fundet:double", "code" :34473, "codeName" :"Location34473"} :aggregering mislykkedes :eksempel@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 Nul-værdier
Giver null resulterer også i en fejl.
Antag, at vi har følgende dokument:
{ "_id" :8, "data" :null }
Data field indeholder null .
Lad os anvende $strLenBytes til det dokument:
db.other.aggregate(
[
{ $match: { _id: { $in: [ 8 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$data" }
}
}
]
)
Resultat:
ufanget undtagelse:Fejl:kommando mislykkedes:{ "ok" :0, "errmsg" :"$strLenBytes kræver et string-argument, fundet:null", "code" :34473, "codeName" :"Location34473"} :sammenlægning mislykkedes :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 Manglende felter
Hvis du fortsætter med temaet om at producere fejl, giver det også en fejl at angive et ikke-eksisterende felt.
Dokument:
{ "_id" :9 }
Anvend $strLenBytes :
db.other.aggregate(
[
{ $match: { _id: { $in: [ 9 ] } } },
{
$project:
{
_id: 0,
data: 1,
result: { $strLenBytes: "$data" }
}
}
]
)
Resultat:
Fejl:kommando mislykkedes:{ "ok" :0, "errmsg" :"$strLenBytes kræver et string-argument, fundet:mangler", "code" :34473, "codeName" :"Location34473"} :aggregering mislykkedes :eksempel@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