I MongoDB, $ifNull
er en aggregeringspipeline-operatør, der giver dig mulighed for at angive en værdi, der skal bruges i stedet for null
.
Den måde, det fungerer på, er, at du giver et udtryk og et erstatningsudtryk. Hvis udtrykket evalueres til en værdi, der ikke er nul, returneres dette udtryk. Men hvis udtrykket evalueres til en nulværdi, $ifNull
returnerer værdien af erstatningsudtrykket.
En null-værdi inkluderer forekomster af udefinerede værdier eller manglende felter.
Eksempel
Antag, at vi har en samling kaldet test
med følgende dokumenter:
{ "_id" : 1, "data" : 250 } { "_id" : 2, "data" : -250 } { "_id" : 3, "data" : "Bucket" } { "_id" : 4, "data" : 0 } { "_id" : 5, "data" : ISODate("2021-01-03T23:30:15.100Z") } { "_id" : 6, "data" : null } { "_id" : 7, "data" : Infinity } { "_id" : 8, "data" : -Infinity }
Her er, hvad der sker, hvis vi bruger $ifNull
operatør på data
felt:
db.test.aggregate(
[
{
$project:
{
result: { $ifNull: [ "$data", "Value not provided" ] }
}
}
]
)
Resultat:
{ "_id" : 1, "result" : 250 } { "_id" : 2, "result" : -250 } { "_id" : 3, "result" : "Bucket" } { "_id" : 4, "result" : 0 } { "_id" : 5, "result" : ISODate("2021-01-03T23:30:15.100Z") } { "_id" : 6, "result" : "Value not provided" } { "_id" : 7, "result" : Infinity } { "_id" : 8, "result" : -Infinity }
Vi kan se, at kun ét felt havde en nulværdi, og derfor var det det eneste, der returnerede "Value not provided"
.
Udefinerede og manglende felter
Som nævnt behandles udefinerede værdier og manglende felter som nulværdier.
Antag, at vi føjer følgende dokumenter til vores samling:
{ "_id" : 9, "data" : undefined } { "_id" : 10, "name" : "Homer" }
I dette tilfælde har dokument 9 undefined
i datafeltet, men dokument 10 har ikke engang en data
felt.
Her er, hvad der sker, når vi anvender $ifNull
til disse dokumenter:
db.test.aggregate(
[
{ $match: { _id: { $in: [ 9, 10 ] } } },
{
$project:
{
result: { $ifNull: [ "$data", "Value not provided" ] }
}
}
]
)
Resultat:
{ "_id" : 9, "result" : "Value not provided" } { "_id" : 10, "result" : "Value not provided" }