Todos mis registros tienen un campo llamado "imágenes". Este campo es un array de cadenas.
Ahora quiero los 10 registros más recientes en los que esta matriz NO ESTÁ vacía.
He buscado en Google, pero extrañamente no he encontrado mucho sobre esto. He leído sobre la opción $where, pero me preguntaba cómo es de lento con respecto a las funciones nativas, y si hay una solución mejor.
Y aún 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 entonces también devuelve registros vacíos, por supuesto.
Si también tiene documentos que no tienen la clave, puede utilizar:
ME.find({ pictures: { $exists: true, $not: {$size: 0} } })
MongoDB no utiliza índices si $size está involucrado, así que aquí hay una solución mejor:
ME.find({ pictures: { $exists: true, $ne: [] } })
Desde la versión 2.6 de MongoDB, se puede comparar con el operador $gt
pero podría llevar a resultados inesperados (puede encontrar una explicación detallada en esta respuesta):
ME.find({ pictures: { $gt: [] } })