2012-05-14 15 views
92

que tienen un documento Email que tiene un campo sent_at fecha:MongoDB: ¿Cómo consultar los registros donde el campo es nulo o no está establecido?

{ 
    'sent_at': Date(1336776254000) 
} 

Si esto Email no ha sido enviado, el campo es sent_at sea nula o inexistente.

Necesito obtener el conteo de todos los enviados/no enviados Emails. Estoy atascado tratando de descubrir la forma correcta de consultar esta información. Creo que este es el camino correcto para obtener el recuento enviado:

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

Pero, ¿cómo debería obtener el recuento de los que no son enviados?

Respuesta

153

Si el campo sent_at no está allí cuando no se establece a continuación:

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

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

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

Refer here for querying and null

+1

Actualizado conexión de referencia: https://docs.mongodb.org/manual/tutorial/query-documents/#faq-developers-query-for-nulls – jakeorr

+0

Una vez más https://docs.mongodb.com/ manual/tutorial/query-for-null-fields/ – Hatshepsut

5

vosotros se cree puede hacer una sola línea:

{ "sent_at": null } 
10

Si desea contar sólo los documentos con sent_at definido con un valor de null (no contar con los documentos sent_at no establecido):

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

Gracias. Cuando se comprueba si el campo existe pero se establece en nulo, esto es muy útil. – jstice4all

6

Uso:

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

que incluye a todos correos electrónicos cuya propiedad sent_at es nula o no está establecida. La consulta anterior es la siguiente.

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