Supposons que j'ai une collection qui contient les documents suivants:
{ "_id": 1, name: "Apple" }
{ "_id": 2, name: "Banana", "is_reported": null }
{ "_id": 3, name: "Cherry", "is_reported": false }
{ "_id": 4, name: "Kiwi", "is_reported": true }
Existe-t-il une requête plus simple pour sélectionner tous les documents où "is_reported" est dans un état falsifié; c'est-à-dire inexistant, nul ou faux? Autrement dit, une requête qui sélectionne Apple, Banana et Cherry, mais pas Kiwi?
Selon la FAQ MongoDB , { "is_reported": null }
sélectionnera les documents où "is_reported" est nul ou inexistant, mais il ne sélectionne toujours pas les documents où "is_reported" est faux.
En ce moment, j'ai la requête suivante, qui fonctionne bien, mais elle ne semble tout simplement pas très élégante. S'il y a plusieurs champs que je dois sélectionner, cela devient très rapidement désordonné. Existe-t-il une meilleure requête qui atteint le même résultat final?
db.fruits.find({ $or: [ { "is_reported": null }, { "is_reported": false } ] })
Vous pouvez le faire avec $in
:
db.fruits.find({is_reported: {$in: [null, false]}})
retour:
{
"_id": 1,
"name": "Apple"
}
{
"_id": 2,
"name": "Banana",
"is_reported": null
}
{
"_id": 3,
"name": "Cherry",
"is_reported": false
}
Vous pouvez également inverser les choses de manière logique et utiliser $ne
si vous n'avez aucune valeur en plus de true
à exclure:
db.fruits.find({is_reported: {$ne: true}})