145 votes

MongoDB : Comment rechercher des enregistrements dont le champ est nul ou non défini ?

J'ai un Email qui possède un sent_at champ de la date :

{
  'sent_at': Date( 1336776254000 )
}

Si cette Email n'a pas été envoyé, le sent_at est soit nul, soit inexistant.

J'ai besoin de connaître le nombre d'envois et de non-envois. Emails . J'ai du mal à trouver la bonne façon de demander ces informations. Je pense que c'est la bonne façon d'obtenir le nombre d'envois :

db.emails.count({sent_at: {$ne: null}})

Mais comment puis-je obtenir le décompte de ceux qui n'ont pas été envoyés ?

1voto

joelnet Points 1762

Vous pouvez utiliser un $or pour rechercher les deux conditions.

db.emails.count(
  $or:
  [
    { "sent_at": { $exists: false } },
    { "sent_at": null }
  ]);

1voto

S.Yadav Points 1054

S'il est nécessaire de vérifier l'existence d'un attribut et d'une valeur égale à null dans le même document, en tant que-

db.emails.count($or: [
  {sent_at: {$exists: false}},
  {sent_at: null}
]) 

Les opérations ci-dessus peuvent être effectuées en une seule ligne de requête, ce qui prend moins de temps.

db.emails.count($or: [ {sent_at: nil }])

parce que nil recherchera des documents si la clé doesn't exist La valeur de l'entreprise s'ajoute à la valeur de l'entreprise. null .
Mieux vaut avoir un aperçu de la source il m'a sauvé la mise.

Note : Utiliser nil au lieu de null dans les versions plus récentes de mongodb.

0voto

Vivek Maraina Points 1

Vous pouvez également essayer ceci :

db.emails.find($and:[{sent_at:{$exists:true},'sent_at':null}]).count()

0voto

Vous pouvez utiliser l'opérateur $in pour vérifier les deux cas

db.emails.find({"sent_at": {$in:[null,""]}).count()

-1voto

SagitSri Points 333
db.employe.find({ $and:[ {"dept":{ $exists:false }, "empno": { $in:[101,102] } } ] }).count();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X