J'ai un document Email
qui a un sent_at
champ date:
{
'sent_at': Date( 1336776254000 )
}
Si ce Email
n'a pas été envoyé, le sent_at
le champ est nul ou inexistant.
J'ai besoin de connaître le nombre total de messages envoyés/non envoyés Emails
. Je suis coincé à essayer de trouver la bonne façon d'interroger cette information. Je pense que c'est la bonne façon d'obtenir le décompte envoyé:
db.emails.count({sent_at: {$ne: null}})
Mais comment puis-je obtenir le nombre de ceux qui ne sont pas envoyés?
Si le champ sent_at n'est pas présent alors qu'il n'est pas défini, alors:
db.emails.count({sent_at: {$exists: false}})
Si c'est là et nul, ou pas du tout:
db.emails.count({sent_at: null})
Si vous voulez seulement compter les documents avec sent_at
défini avec une valeur de null
(ne comptez pas les documents avec sent_at
pas encore défini):
db.emails.count({sent_at: { $type: 10 }})
Utilisation:
db.emails.count({sent_at: null})
Ce qui compte tous les emails dont la propriété sent_at est nulle ou non 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}
])
On dirait que vous ne pouvez faire qu'une seule ligne:
{ "sent_at": null }
Vous pouvez aussi essayer ceci:
db.emails.find($and:[{sent_at:{$exists:true},'sent_at':null}]).count()