Fra MongoDB 4.0 kan du bruge $toObjectId
aggregeringspipeline-operatør for at konvertere en streng til et ObjectId.
Strengen skal være en hexadecimal streng med længden 24.
Eksempel
Antag, at vi har en samling kaldet foo
og det indeholder følgende dokument:
{ "_id" : 1, "bar" : "6008c9a5c8eb4369cf6ad9cc" }
Vi kan bruge $toObjectId
operatør for at konvertere bar
felt til et ObjectId.
db.foo.aggregate(
[
{
$project:
{
_id: 0,
bar: { $toObjectId: "$bar" }
}
}
]
).pretty()
Resultat:
{ "bar" : ObjectId("6008c9a5c8eb4369cf6ad9cc") }
Nu er strengen blevet konverteret til et ObjectId som angivet.
Fejl
Ovenstående eksempel fungerede, fordi vi leverede en hexadecimal streng med længde 24 til $toObjectId
operatør.
Her er, hvad der sker, når vi angiver en værdi, der ikke er en hexadecimal streng med længden 24:
db.foo.aggregate(
[
{
$project:
{
_id: 0,
bar: { $toObjectId: "$_id" }
}
}
]
).pretty()
Resultat:
Error: command failed: {
"ok" : 0,
"errmsg" : "Unsupported conversion from double to objectId in $convert with no onError value",
"code" : 241,
"codeName" : "ConversionFailure"
} : aggregate failed :
[email protected]/mongo/shell/utils.js:25:13
[email protected]/mongo/shell/assert.js:18:14
[email protected]/mongo/shell/assert.js:618:17
[email protected]/mongo/shell/assert.js:708:16
[email protected]/mongo/shell/db.js:266:5
[email protected]/mongo/shell/collection.js:1046:12
@(shell):1:1
Denne fejl standser hele aggregeringsoperationen og giver en grim fejl.
En alternativ fremgangsmåde er at bruge $convert
operator i stedet for $toObjectId
. $convert
operator giver dig mulighed for at håndtere fejl uden at påvirke hele aggregeringsoperationen.
$toObjectId
operator svarer til at bruge $convert
operatør for at konvertere en værdi til et ObjectId.
Her er det samme eksempel med $convert
:
db.foo.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$_id",
to: "objectId",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Resultat:
{ "result" : "An error occurred" }
Brug af $convert
gav os mulighed for at angive den fejlmeddelelse, der skulle bruges, når fejlen opstod, og det stoppede ikke hele aggregeringsoperationen.
Se MongoDB $convert
for flere eksempler.