tutorial example databases mongodb database nosql

example - nosql mongodb



¿Cómo se consulta esto en Mongo?(No es nulo) (8)

db.mycollection.find(HAS IMAGE URL)


Compartir para futuros lectores.

Esta consulta funcionó para nosotros (consulta ejecutada desde la brújula MongoDB ):

{ "fieldName": { "$nin": [ "", null ] } }


En pymongo puedes usar:

db.mycollection.find({"IMAGE URL":{"$ne":None}});

Porque pymongo representa mongo "null" como python "Ninguno".


Esto devolverá todos los documentos con una clave llamada "URL de IMAGEN", pero aún pueden tener un valor nulo.

db.mycollection.find({"IMAGE URL":{$exists:true}});

Esto devolverá todos los documentos con una clave llamada "URL de IMAGEN" y un valor no nulo.

db.mycollection.find({"IMAGE URL":{$ne:null}});

Además, según los documentos, $ existe actualmente no puede usar un índice, pero $ ne puede.

Edición: Agregando algunos ejemplos debido al interés en esta respuesta.

Teniendo en cuenta estas inserciones:

db.test.insert({"num":1, "check":"check value"}); db.test.insert({"num":2, "check":null}); db.test.insert({"num":3});

Esto devolverá los tres documentos:

db.test.find();

Esto devolverá los documentos primero y segundo solamente:

db.test.find({"check":{$exists:true}});

Esto devolverá solo el primer documento:

db.test.find({"check":{$ne:null}});

Esto devolverá los documentos segundo y tercero solamente:

db.test.find({"check":null})


Un trazador de líneas es el mejor:

db.mycollection.find({ ''fieldname'' : { $exists: true, $ne: null } });

Aquí,

mycollection : coloca el nombre de tu colección deseada

nombre de campo: coloque el nombre de campo deseado

Explicacion

$ existe : cuando es cierto, $ existe coincide con los documentos que contienen el campo, incluidos los documentos donde el valor del campo es nulo. Si es falso, la consulta devuelve solo los documentos que no contienen el campo.

$ ne selecciona los documentos donde el valor del campo no es igual al valor especificado. Esto incluye documentos que no contienen el campo.

Por lo tanto, en su caso proporcionado, después de la consulta, se devolverán todos los documentos con el campo imageurl y no tendrá un valor nulo:

db.mycollection.find({ ''imageurl'' : { $exists: true, $ne: null } });


Una alternativa que no se ha mencionado, pero que puede ser una opción más eficiente para algunos (no funcionará con entradas NULL) es usar un índice disperso (las entradas en el índice solo existen cuando hay algo en el campo). Aquí hay un conjunto de datos de muestra:

db.foo.find() { "_id" : ObjectId("544540b31b5cf91c4893eb94"), "imageUrl" : "http://example.com/foo.jpg" } { "_id" : ObjectId("544540ba1b5cf91c4893eb95"), "imageUrl" : "http://example.com/bar.jpg" } { "_id" : ObjectId("544540c51b5cf91c4893eb96"), "imageUrl" : "http://example.com/foo.png" } { "_id" : ObjectId("544540c91b5cf91c4893eb97"), "imageUrl" : "http://example.com/bar.png" } { "_id" : ObjectId("544540ed1b5cf91c4893eb98"), "otherField" : 1 } { "_id" : ObjectId("544540f11b5cf91c4893eb99"), "otherField" : 2 }

Ahora, crea el índice disperso en el campo imageUrl:

db.foo.ensureIndex( { "imageUrl": 1 }, { sparse: true } ) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }

Ahora, siempre hay una posibilidad (y en particular con un pequeño conjunto de datos como mi muestra) de que en lugar de usar un índice, MongoDB usará una exploración de tabla, incluso para una posible consulta de índice cubierta. Resulta que eso me da una manera fácil de ilustrar la diferencia aquí:

db.foo.find({}, {_id : 0, imageUrl : 1}) { "imageUrl" : "http://example.com/foo.jpg" } { "imageUrl" : "http://example.com/bar.jpg" } { "imageUrl" : "http://example.com/foo.png" } { "imageUrl" : "http://example.com/bar.png" } { } { }

De acuerdo, los documentos adicionales sin imageUrl se devuelven, simplemente están vacíos, no lo que queríamos. Sólo para confirmar por qué, hacer una explicación:

db.foo.find({}, {_id : 0, imageUrl : 1}).explain() { "cursor" : "BasicCursor", "isMultiKey" : false, "n" : 6, "nscannedObjects" : 6, "nscanned" : 6, "nscannedObjectsAllPlans" : 6, "nscannedAllPlans" : 6, "scanAndOrder" : false, "indexOnly" : false, "nYields" : 0, "nChunkSkips" : 0, "millis" : 0, "server" : "localhost:31100", "filterSet" : false }

Entonces, sí, un BasicCursor es igual a una exploración de tabla, no utilizó el índice. Forcemos la consulta para usar nuestro índice disperso con una hint() :

db.foo.find({}, {_id : 0, imageUrl : 1}).hint({imageUrl : 1}) { "imageUrl" : "http://example.com/bar.jpg" } { "imageUrl" : "http://example.com/bar.png" } { "imageUrl" : "http://example.com/foo.jpg" } { "imageUrl" : "http://example.com/foo.png" }

Y está el resultado que buscábamos: solo se devuelven los documentos con el campo completado. Esto también solo utiliza el índice (es decir, es una consulta de índice cubierta), por lo que solo el índice debe estar en la memoria para devolver los resultados.

Este es un caso de uso especializado y no se puede usar en general (consulte otras respuestas para esas opciones). En particular, debe tenerse en cuenta que tal como están las cosas, no puede usar count() de esta manera (para mi ejemplo, devolverá 6 en lugar de 4), así que solo use cuando sea apropiado.


la consulta será

db.mycollection.find({"IMAGE URL":{"$exists":"true"}})

devolverá todos los documentos que tengan una "URL de IMAGEN" como clave ...........


db.collection_name.find({"filed_name":{$exists:true}});

buscar documentos que contengan este nombre_archivo incluso si es nulo.

Mi proposición:

db.collection_name.find({"field_name":{$type:2}}) //type:2 == String

Puede verificar el tipo de atributo requerido, devolverá todos los documentos que su nombre de campo consultado contiene un valor porque está verificando el tipo del archivo, si es nulo, la condición de tipo no coincide, por lo que no se devolverá nada.

Nb : si el field_name tiene una cadena vacía que significa "", se devolverá. Es el mismo comportamiento para db.collection_name.find({"filed_name":{$ne:null}});

Validación adicional:

Bien, no hemos terminado todavía, necesitamos una condición extra.

db.collection_name. find({ "field_name":{$type:2},$where:"this.field_name.length >0"})

O

db.collection_name. find({ "field_name":{$ne:null},$where:"this.field_name.length >0"})

Referencia para todos los tipos: https://docs.mongodb.com/manual/reference/operator/query/type/#op._S_type


db.<collectionName>.find({"IMAGE URL":{"$exists":"true"}, "IMAGE URL": {$ne: null}})