MongoDB: Comment interroger les enregistrements où le champ est null ou non?

J'ai un document Email qui a un champ sent_at date:

{
  'sent_at': Date( 1336776254000 )
}

Si ce Email n'a pas été envoyé, le sent_at champ est null, ou inexistant.

J'ai besoin d'obtenir le nombre de tous les envoyés/non Emails. Je suis coincé à essayer de trouver la bonne façon de demander cette information. Je pense que c'est la bonne façon d'obtenir le nombre envoyé:

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

, Mais comment dois-je obtenir le nombre de ceux qui ne sont pas envoyés?

93
demandé sur Yves M. 2012-05-15 01:47:54

4 réponses

Si le champ sent_at n'est pas là quand il n'est pas défini alors:

db.emails.count({sent_at: {$exists: false}})

Si c'est là et null, ou pas du tout:

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

Référez-vous ici pour l'interrogation et null

155
répondu jdi 2016-08-31 00:31:55

Si vous voulez compter uniquement les documents avec sent_at définis avec une valeur de null (Ne comptez pas les documents avec sent_at non défini):

db.emails.count({sent_at: { $type: 10 }})
12
répondu tvs 2016-01-17 03:46:43

Utilisation:

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

Qui compte tous les e-mails dont la propriété sent_at est null ou n'est pas définie. La requête ci-dessus est la même que ci-dessous.

db.emails.count($or: [
  {sent_at: {$exists: false}},
  {sent_at: null}
])
7
répondu Anil Tallam 2017-04-06 07:38:57

Semble que vous pouvez simplement faire une seule ligne:

{ "sent_at": null }
6
répondu Jim Horng 2015-04-07 11:04:03