MongoDB: ¿Cómo buscar registros donde el campo es nulo o no está establecido?


Tengo un documento Email que tiene un campo de fecha sent_at:

{
  'sent_at': Date( 1336776254000 )
}

Si este Email no ha sido enviado, el campo sent_at es nulo o inexistente.

Necesito obtener el recuento de todos los enviados/no enviados Emails. Estoy atascado en tratar de averiguar la forma correcta de consultar esta información. Creo que esta es la manera correcta de obtener el número de enviados:

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

Pero ¿cómo debo obtener el recuento de los que no son enviados?

Author: Yves M., 2012-05-15

4 answers

Si el campo sent_at no está allí cuando no está establecido entonces:

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

Si está allí y nulo, o no está en absoluto:

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

Consulte aquí para consultar y null

 155
Author: jdi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-31 00:31:55

Si solo desea contar los documentos con sent_at definido con un valor de null (no cuente los documentos con sent_at no establecido):

db.emails.count({sent_at: { $type: 10 }})
 12
Author: tvs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-17 03:46:43

Uso:

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

Que cuenta todos los correos cuya propiedad sent_at es null o no está establecida. La consulta anterior es la misma que la siguiente.

db.emails.count($or: [
  {sent_at: {$exists: false}},
  {sent_at: null}
])
 7
Author: Anil Tallam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-06 07:38:57

Parece que puedes hacer una sola línea:

{ "sent_at": null }
 6
Author: Jim Horng,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-07 11:04:03