L'opérateur de comparaison NOT IN dans MongoDB
-
l’opérateur de comparaison
$nin
(NOT IN
) dans MongoDB -
Utilisez l’opérateur
$nin
avec la méthodefind()
pour interroger un champ dans MongoDB -
Utilisez l’opérateur
$nin
avec la méthodefind()
pour interroger un document intégré dans MongoDB -
Utilisez l’opérateur
$nin
avec la méthodefind()
pour interroger un tableau dans MongoDB -
Utilisez l’opérateur
$nin
avec la méthodefind()
pour interroger un tableau de documents dans MongoDB -
Utilisez l’opérateur de comparaison
$nin
avec la méthodeupdate()
pour mettre à jour une valeur de champ dans MongoDB -
Utiliser l’opérateur
$nin
avec des expressions régulières dans MongoDB
Les opérateurs de comparaison sont très utiles lorsque vous travaillez avec de grands ensembles de données. Il est utile d’obtenir des informations à partir des données.
Ce didacticiel explique comment utiliser l’opérateur de comparaison $nin
(NOT IN
) dans MongoDB.
Il montre également comment utiliser les méthodes $nin
avec find()
et update()
dans MongoDB. Plus loin, nous apprendrons également l’utilisation des expressions régulières avec l’opérateur $nin
.
l’opérateur de comparaison $nin
(NOT IN
) dans MongoDB
Le $nin
est l’un des opérateurs de comparaison de MongoDB. Cet opérateur sélectionne les documents où la valeur du champ n’appartient pas au tableau spécifié, ou le champ n’existe pas.
Dans le cas où le champ contient un tableau, un tableau de documents ou un tableau de documents intégrés, nous n’obtiendrons que les documents où le champ contient le tableau sans élément égal à la valeur dans le tableau donné (nous verrons ce scénario également plus tard dans ce tutoriel).
Avant d’entrer dans les détails, créons la collection d’échantillons contenant certains documents.
Exemple de code :
db.createCollection('students');
db.students.insertMany([
{
"name": {first: "Mehvish", last: "Ashiq"},
"age": 30,
"gender": "Female",
"discipline": "BSCS",
"joining_year": 2014,
"department": "Computer Science",
"courses":[ "Python","Java", "Machine Learning", "Data Science"],
"contact":[
{ phone: { type: "cell", number: "923042516485" }},
{ mail: { type: "official", email: "mehvishofficial@gmail.com"}}
]
},
{
"name": {first: "Aftab", last: "Raza"},
"age": 25,
"gender": "Male",
"discipline": "BSIT",
"joining_year": 2012,
"department": "Information Technology",
"courses":[ "Python","JavaScript", "Information Security"],
"contact":[
{ phone: { type: "landline", number: "111-444-5555" }},
{ mail: { type: "personal", email: "aftab@hotmail.com"}}
]
}
])
db.students.find().pretty()
Production:
{
"_id" : ObjectId("6298ef54271c5124b739d7d3"),
"name" : {
"first" : "Mehvish",
"last" : "Ashiq"
},
"age" : 30,
"gender" : "Female",
"discipline" : "BSCS",
"joining_year" : 2014,
"department" : "Computer Science",
"courses" : [
"Python",
"Java",
"Machine Learning",
"Data Science"
],
"contact" : [
{
"phone" : {
"type" : "cell",
"number" : "923042516485"
}
},
{
"mail" : {
"type" : "official",
"email" : "mehvishofficial@gmail.com"
}
}
]
}
{
"_id" : ObjectId("6298ef54271c5124b739d7d4"),
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"age" : 25,
"gender" : "Male",
"discipline" : "BSIT",
"joining_year" : 2012,
"department" : "Information Technology",
"courses" : [
"Python",
"JavaScript",
"Information Security"
],
"contact" : [
{
"phone" : {
"type" : "landline",
"number" : "111-444-5555"
}
},
{
"mail" : {
"type" : "personal",
"email" : "aftab@hotmail.com"
}
}
]
}
La seule raison d’avoir des documents un peu compliqués est d’apprendre à utiliser l’opérateur de comparaison $nin
avec des champs différents. Par exemple, un seul champ, un champ avec le document incorporé, un champ contenant un tableau et un tableau de documents incorporés.
Utilisez l’opérateur $nin
avec la méthode find()
pour interroger un champ dans MongoDB
Exemple de code :
db.students.find({ "joining_year": { $nin: [2011,2014] }}).pretty();
Production:
{
"_id" : ObjectId("6298ef54271c5124b739d7d4"),
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"age" : 25,
"gender" : "Male",
"discipline" : "BSIT",
"joining_year" : 2012,
"department" : "Information Technology",
"courses" : [
"Python",
"JavaScript",
"Information Security"
],
"contact" : [
{
"phone" : {
"type" : "landline",
"number" : "111-444-5555"
}
},
{
"mail" : {
"type" : "personal",
"email" : "aftab@hotmail.com"
}
}
]
}
Dans cet exemple, nous utilisons l’opérateur $nin
avec la méthode find()
pour rechercher l’ensemble des documents où joining_year
n’est ni 2011
ni 2014
.
Nous pouvons utiliser la commande de la manière suivante si nous voulons n’avoir que certains champs au lieu du document entier. Écrivez 1
pour imprimer le champ et sa valeur sur l’écran de l’ordinateur, tandis que 0
signifie que nous ne voulons pas de ce champ dans le jeu de résultats.
Exemple de code :
db.students.find(
{ "joining_year": { $nin: [2011,2014] }},
{"name": 1, "discipline": 1, "department": 1, "_id":0}
).pretty();
Production:
{
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"discipline" : "BSIT",
"department" : "Information Technology"
}
Utilisez l’opérateur $nin
avec la méthode find()
pour interroger un document intégré dans MongoDB
Exemple de code :
db.students.find(
{ "name.last": { $nin: ["Raza", "Ali"] }},
{ "name": 1, "gender": 1, "age": 1, "_id":0}
).pretty();
Production:
{
"name" : {
"first" : "Mehvish",
"last" : "Ashiq"
},
"age" : 30,
"gender" : "Female"
}
Les exemples de documents ont un champ nommé name
pour ce didacticiel, qui contient en outre le document intégré avec deux champs (first
et last
). Pour utiliser l’opérateur de comparaison $nin
avec le champ name
, nous utilisons la notation par points name.first
.
Pour cet extrait de code, nous essayons de récupérer le name
, age
et le gender
pour les documents où la valeur de name.last
n’est pas le membre du tableau spécifié pour le $nin
opérateur.
Nous obtenons les champs spécifiés à partir de ces documents où le name.last
n’est ni Raza
ni Ali
. On peut aussi utiliser la condition AND
avec l’opérateur $nin
.
Exemple de code :
db.students.find(
{ "name.last": { $nin: ["Raza", "Ali"]}, "name.first": {$nin: ["Mehvish"]}},
{ "name": 1, "gender": 1, "age": 1, "_id":0}
).pretty();
Cette fois, nous n’obtiendrons aucune sortie car nous avons deux documents où le premier document a Mehvish
comme valeur de name.first
tandis que le second document contient le Raza
comme valeur du champ name.last
. Ainsi, les deux documents sont exclus du jeu de résultats et nous n’avons rien obtenu.
Utilisez l’opérateur $nin
avec la méthode find()
pour interroger un tableau dans MongoDB
Exemple de code :
db.students.find(
{ "courses": { $nin: ["JavaScript", "Networking", "Psychology"] }},
{ "courses": 1, "department": 1, "_id":0}
).pretty();
Production:
{
"department" : "Computer Science",
"courses" : [
"Python",
"Java",
"Machine Learning",
"Data Science"
]
}
Comprendre attentivement cette sortie. Dans cette sortie, le champ course
contient un tableau sans élément égal à la valeur dans le tableau donné pour l’opérateur $nin
.
L’ensemble du document où tout champ contenant un tableau avec des éléments égaux à JavaScript
, Networking
, ou Psychology
sera exclu du jeu de résultats.
Utilisez l’opérateur $nin
avec la méthode find()
pour interroger un tableau de documents dans MongoDB
Observez attentivement le champ contact
que nous avons utilisé lors du remplissage de la collection students
au début de ce didacticiel. Il contient un tableau de documents où chaque document a un document incorporé (imbriqué).
Comment interroger cela en utilisant l’opérateur $nin
? Voir l’exemple ci-dessous.
db.students.find(
{ "contact.phone.type": { $nin: ["cell"] }},
{ "contact": 1, "department": 1, "_id":0}
).pretty();
Production:
{
"department" : "Information Technology",
"contact" : [
{
"phone" : {
"type" : "landline",
"number" : "111-444-5555"
}
},
{
"mail" : {
"type" : "personal",
"email" : "aftab@hotmail.com"
}
}
]
}
Utilisez l’opérateur de comparaison $nin
avec la méthode update()
pour mettre à jour une valeur de champ dans MongoDB
Exemple de code :
db.students.update(
{ "joining_year": {$nin: [2011,2014]}},
{ $set: {"joining_year": 2000}}
);
Dans cet extrait de code, nous récupérons les documents où le joining_year
n’est ni 2014
ni 2011
puis définissons la valeur de joining_year
sur 2000
. Ensuite, utilisez la commande suivante pour voir le document mis à jour.
db.students.find().pretty()
Utiliser l’opérateur $nin
avec des expressions régulières dans MongoDB
Exemple de code :
var array_of_regex = [/Data+/];
db.students.find(
{ "courses": {$nin: array_of_regex}},
{"name":1, "courses":1, "department":1, "_id":0}
).pretty();
Production:
{
"name" : {
"first" : "Aftab",
"last" : "Raza"
},
"department" : "Information Technology",
"courses" : [
"Python",
"JavaScript",
"Information Security"
]
}
Pour cet exemple, nous créons un tableau pouvant contenir différentes expressions régulières. Pour l’instant, nous n’avons qu’une seule expression régulière.
Pourquoi devons-nous créer un tableau d’expressions régulières ? C’est parce que le $nin
prend un tableau avec lequel comparer.