Tous mes enregistrements ont un champ appelé "images". Ce champ est un tableau de chaînes de caractères.
Je veux maintenant les 10 derniers enregistrements où ce tableau N'EST PAS vide.
J'ai fait des recherches sur Internet, mais bizarrement, je n'ai pas trouvé grand chose à ce sujet. Je me suis renseigné sur l'option $where, mais je me demandais si elle était plus lente que les fonctions natives et s'il existait une meilleure solution.
Et même dans ce cas, cela ne fonctionne pas :
ME.find({$where: 'this.pictures.length > 0'}).sort('-created').limit(10).execFind()
Elle ne renvoie rien. Laisser this.pictures
sans le bit de longueur fonctionne, mais cela renvoie aussi des enregistrements vides, bien sûr.
Si vous avez aussi des documents qui n'ont pas la clé, vous pouvez utiliser :
ME.find({ pictures: { $exists: true, $not: {$size: 0} } })
MongoDB n'utilise pas d'index si $size est impliqué, voici donc une meilleure solution :
ME.find({ pictures: { $exists: true, $ne: [] } })
Depuis la version 2.6 de MongoDB, vous pouvez comparer avec l'opérateur $gt
mais cela peut conduire à des résultats inattendus (vous pouvez trouver une explication détaillée dans cette réponse) :
ME.find({ pictures: { $gt: [] } })
Après quelques recherches supplémentaires, notamment dans les documents relatifs à mongodb, et en rassemblant des éléments, j'ai trouvé la réponse :
ME.find({pictures: {$exists: true, $not: {$size: 0}}})