Compruebe que el campo existe con MongoDB


131

Así que intento encontrar todos los registros que tienen un conjunto de campos y no son nulos.

Intento usar $exists, sin embargo, de acuerdo con la documentación de MongoDB, esta consulta devolverá campos que son iguales a nulos.

$exists coincide con los documentos que contienen el campo que almacena el valor nulo.

Así que ahora supongo que tendré que hacer algo como esto:

db.collection.find({ "fieldToCheck" : { $exists : true, $not : null } })

Sin embargo, cada vez que intento esto, aparece el error ¿ [invalid use of $not] Alguien tiene una idea de cómo consultar esto?

Respuestas:


184

Uso $ne(para "no igual")

db.collection.find({ "fieldToCheck": { $exists: true, $ne: null } })

¿Qué devuelve esto? ¿Una colección nula? ¿Un solo artículo? ¿Una matriz?
— Oliver Dixon

44
@iLoveUnicorns: lo que findsiempre devuelve: una colección de registros que coinciden con los criterios.
— Sergio Tulentsev

2
@SergioTulentsev AFAIK devuelve un cursor
— fernandohur

@fernandohur: sí, pero si tiene menos de una página de documentos, ni siquiera verá la diferencia. Y si tuviera que ejecutar esta consulta desde un controlador externo, estoy bastante seguro de que la mayoría de ellos lo protegen de los detalles de implementación del cursor.
— Sergio Tulentsev

24

Supongamos que tenemos una colección como la siguiente:

{ 
  "_id":"1234"
  "open":"Yes"
  "things":{
             "paper":1234
             "bottle":"Available"
             "bottle_count":40
            } 
}

¿Queremos saber si el campo de botella está presente o no?

Respuesta:

db.products.find({"things.bottle":{"$exists":true}})

2
When <boolean> is true, $exists matches the documents that contain the field, including documents where the field value is null. De los documentos.
— AlbertEngelB

1
sí, pero no veo por qué un DB contendría el valor nulo, es descuidado
— Martijn Scheffer

3

encuentro que esto funciona para mi

db.getCollection('collectionName').findOne({"fieldName" : {$ne: null}})
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.