MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB existe $

Dans MongoDB, vous pouvez utiliser le $exists opérateur de requête d'élément pour faire correspondre les documents qui contiennent un champ spécifique.

Vous pouvez également l'utiliser pour faire correspondre des documents qui ne contiennent pas de champ spécifique.

Vous pouvez également l'utiliser en conjonction avec d'autres opérateurs tels que $nin pour faire correspondre les documents où un champ donné existe, mais il ne contient pas de valeur spécifique.

Exemple

Supposons que nous ayons une collection appelée cats qui contient les documents suivants :

{ "_id" :1, "name" :"Scratch", "born" :"mars 2020" }{ "_id" :2, "name" :"Meow", "weight" :30 }{ "_id" :3, "name" :"Fluffy", "height" :15 }{ "_id" :4, "name" :"Sox", "weight" :40 }{ "_id" :5, "name " :null, "weight" :20 }{ "_id" :6, "height" :20, "born" :ISODate("2021-01-03T23:30:15.123Z") }

Ces documents sont légèrement incohérents en ce qui concerne les champs dont ils disposent. Certains ont un weight champ, les autres ont une height champ, certains ont un born champ, etc

Nous pouvons utiliser le $exists opérateur pour renvoyer les documents de cette collection qui ont un champ spécifique.

Exemple :

db.cats.find( { weight: { $exists: true } } ) 

Résultat :

{ "_id" :2, "name" :"Meow", "weight" :30 }{ "_id" :4, "name" :"Sox", "weight" :40 }{ "_id" :5, "nom" : null, "poids" : 20 }

Nous pouvons voir que seuls les documents contenant un weight champ sont renvoyés.

Champs contenant null

Le $exists l'opérateur inclut les champs qui contiennent null . Il ne fait pas de distinction entre null et non null valeurs.

Exemple :

db.cats.find( { name: { $exists: true } } ) 

Résultat :

{ "_id" :1, "name" :"Scratch", "born" :"mars 2020" }{ "_id" :2, "name" :"Meow", "weight" :30 }{ "_id" :3, "name" :"Fluffy", "height" :15 }{ "_id" :4, "name" :"Sox", "weight" :40 }{ "_id" :5, "name " :nul, "poids" :20 }

Nous pouvons voir que le document 5 a été renvoyé, même si son name le champ est null .

Existe sans valeur spécifique

Vous pouvez combiner $exists avec d'autres opérateurs pour renvoyer les documents qui contiennent le champ, mais ce champ ne contient pas de valeur spécifique.

Exemple :

db.cats.find( { weight: { $exists: true, $nin: [20,30] } } ) 

Résultat :

{ "_id" :4, "name" :"Sox", "weight" :40 }

C'est un résultat différent de celui que nous aurions vu si nous avions simplement utilisé $nin sans le $exists opérateur.

Voici à quoi cela aurait ressemblé :

db.cats.find( { weight: { $nin: [20,30] } } ) 

Résultat :

{ "_id" :1, "name" :"Scratch", "born" :"mars 2020" }{ "_id" :3, "name" :"Fluffy", "height" :15 }{ "_id" :4, "name" :"Sox", "weight" :40 }{ "_id" :6, "height" :20, "born" :ISODate("2021-01-03T23:30:15.123Z ") } 

Documents ne contenant pas de champ spécifique

Vous pouvez utiliser $exists: false pour retourner des documents qui ne sont pas contenir le champ spécifié.

Exemple :

db.cats.find( { name: { $exists: false } } ) 

Résultat :

{ "_id" :6, "height" :20, "born" :ISODate("2021-01-03T23:30:15.123Z") }

Dans ce cas, un document de la collection ne contient pas le name champ.

Vérifier plusieurs champs

Vous pouvez vérifier l'existence de plusieurs champs en les séparant par une virgule.

Exemple :

db.cats.find( { 
  name: { $exists: true }, 
  height: { $exists: true } 
} ) 

Résultat :

{ "_id" :3, "name" :"Fluffy", "height" :15 }

Cet exemple renvoie tous les documents qui contiennent à la fois un name champ et une height champ.