Encuentre registros de MongoDB donde el campo de matriz no esté vacío
Todos mis registros tienen un campo llamado "imágenes". Este campo es una matriz de cadenas.
Ahora quiero los 10 registros más nuevos donde esta matriz NO ESTÉ vacía.
Busqué en Google, pero curiosamente no encontré mucho sobre esto. Leí la opción $where, pero me preguntaba qué tan lenta es para las funciones nativas y si hay una solución mejor.
Y aun así, eso no funciona:
ME.find({$where: 'this.pictures.length > 0'}).sort('-created').limit(10).execFind()
No devuelve nada. Dejar this.pictures
sin el bit de longitud funciona, pero también devuelve registros vacíos, por supuesto.
Si también tienes documentos que no tienen la clave, puedes utilizar:
ME.find({ pictures: { $exists: true, $not: {$size: 0} } })
MongoDB no usa índices si $size
está involucrado, así que aquí hay una mejor solución:
ME.find({ pictures: { $exists: true, $ne: [] } })
Si su propiedad puede tener valores no válidos (como null
boolean
u otros), entonces puede agregar una verificación adicional utilizando$types
como se propone en esta respuesta :
Con mongo >= 3.2:
ME.find({ pictures: { $exists: true, $type: 'array', $ne: [] } })
Con mongo <3.2:
ME.find({ pictures: { $exists: true, $type: 4, $ne: [] } })
Desde la versión MongoDB 2.6, puede comparar con el operador $gt
, pero esto podría generar resultados inesperados (puede encontrar una explicación detallada en esta respuesta ):
ME.find({ pictures: { $gt: [] } })
Después de buscar un poco más, especialmente en los documentos de mongodb, y de resolver algunas partes del misterio, esta fue la respuesta:
ME.find({pictures: {$exists: true, $not: {$size: 0}}})