Dans MongoDB, $ifNull
est un opérateur de pipeline d'agrégation qui vous permet de spécifier une valeur à utiliser à la place de null
.
La façon dont cela fonctionne est que vous fournissez une expression et une expression de remplacement. Si l'expression donne une valeur non nulle, cette expression est renvoyée. Mais si l'expression est évaluée à une valeur nulle, $ifNull
renvoie la valeur de l'expression de remplacement.
Une valeur nulle inclut des instances de valeurs indéfinies ou de champs manquants.
Exemple
Supposons que nous ayons une collection appelée test
avec les documents suivants :
{ "_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 }
Voici ce qui se passe si nous utilisons le $ifNull
opérateur sur les data
champ :
db.test.aggregate(
[
{
$project:
{
result: { $ifNull: [ "$data", "Value not provided" ] }
}
}
]
)
Résultat :
{ "_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 }
Nous pouvons voir qu'un seul champ avait une valeur nulle et c'est donc le seul qui a renvoyé "Value not provided"
.
Champs non définis et manquants
Comme mentionné, les valeurs indéfinies et les champs manquants sont traités comme des valeurs nulles.
Supposons que nous ajoutions les documents suivants à notre collection :
{ "_id" : 9, "data" : undefined } { "_id" : 10, "name" : "Homer" }
Dans ce cas, le document 9 a undefined
dans le champ de données, mais le document 10 n'a même pas de data
champ.
Voici ce qui se passe lorsque nous appliquons $ifNull
à ces documents :
db.test.aggregate(
[
{ $match: { _id: { $in: [ 9, 10 ] } } },
{
$project:
{
result: { $ifNull: [ "$data", "Value not provided" ] }
}
}
]
)
Résultat :
{ "_id" : 9, "result" : "Value not provided" } { "_id" : 10, "result" : "Value not provided" }