2012-05-14 8 views
92

Ho un documento Email cui campo sent_at data:MongoDB: come eseguire una query per i record in cui il campo è nullo o non impostato?

{ 
    'sent_at': Date(1336776254000) 
} 

Se questo Email non è stato inviato, il campo sent_at è o nullo, o inesistente.

Ho bisogno di ottenere il conteggio di tutti inviati/non inviati Emails. Sono bloccato a cercare di capire il modo giusto per richiedere queste informazioni. Credo che questo sia il modo giusto per ottenere il conteggio inviate:

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

Ma come dovrei ottenere il conteggio di quelli che non sono stati inviati?

risposta

153

Se il campo sent_at non è presente quando il suo non è impostato allora:

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

Se il suo lì e nulla, o non c'è affatto:

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

Refer here for querying and null

+1

collegamento di riferimento Aggiornamento: https://docs.mongodb.org/manual/tutorial/query-documents/#faq-developers-query-for-nulls – jakeorr

+0

Ancora https://docs.mongodb.com/ manuale/tutorial/query-per-campi-null/ – Hatshepsut

5

te sembra può solo fare una sola riga:

{ "sent_at": null } 
10

Se si desidera contare solo i documenti con sent_at definito con un valore di null (non contano i documenti con sent_at non impostato):

db.emails.count({sent_at: { $type: 10 }}) 
+0

Grazie. Quando si verifica se il campo esiste ma è impostato su null, questo è molto utile. – jstice4all

6

Usa:

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

che conta tutto e-mail la cui proprietà sent_at è nullo o non è impostata. La query precedente è la stessa di seguito.

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