MongoDB: come eseguire una query per i record in cui il campo è nullo o non è impostato?


106

Ho un Emaildocumento che ha un sent_atcampo data:

{
  'sent_at': Date( 1336776254000 )
}

Se Emailnon è stato inviato, il sent_atcampo è nullo o inesistente.

Devo ottenere il conteggio di tutti gli inviati / non inviati Emails. Sono bloccato nel cercare di capire il modo giusto per interrogare queste informazioni. Penso che questo sia il modo giusto per ottenere il conteggio inviato:

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

Ma come faccio a ottenere il conteggio di quelli che non vengono inviati?

Risposte:



16

Se vuoi contare SOLO i documenti con sent_atdefinito con un valore di null(non contare i documenti con sent_atnon impostato):

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

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

Votato perché quando si usa findcon plain nullinterpreta valori come 0.0as nulle questa soluzione lo evita
Matthias Herrmann

12

Uso:

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

Che conta tutte le email la cui proprietà sent_at è nulla o non è impostata. La query sopra è la stessa di sotto.

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

8

Sembra che tu possa fare solo una riga:

{ "sent_at": null }

0

Puoi anche provare questo:

db.emails.find($and:[{sent_at:{$exists:true},'sent_at':null}]).count()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.