MongoDB-Datensätze finden, bei denen das Array-Feld nicht leer ist

Alle meine Datensätze haben ein Feld namens "Bilder". Dieses Feld ist ein Array von Zeichenketten.

Ich möchte nun die neuesten 10 Datensätze, bei denen dieses Array NICHT leer ist.

Ich habe herumgegoogelt, aber seltsamerweise habe ich nicht viel dazu gefunden. Ich habe in die $where-Option gelesen, aber ich frage mich, wie langsam das ist, um native Funktionen, und wenn es eine bessere Lösung.

Und selbst dann, das funktioniert nicht:

ME.find({$where: 'this.pictures.length > 0'}).sort('-created').limit(10).execFind()

Gibt nichts zurück. Wenn man this.pictures ohne das Längenbit belässt, funktioniert es, aber dann werden natürlich auch leere Datensätze zurückgegeben.

Lösung

Wenn Sie auch Dokumente haben, die den Schlüssel nicht haben, können Sie ihn verwenden:

ME.find({ pictures: { $exists: true, $not: {$size: 0} } })

MongoDB verwendet keine Indizes, wenn $size involviert ist, daher gibt es hier eine bessere Lösung:

ME.find({ pictures: { $exists: true, $ne: [] } })

Seit MongoDB 2.6 können Sie mit dem Operator $gt vergleichen, was aber zu unerwarteten Ergebnissen führen kann (eine ausführliche Erklärung finden Sie in dieser Antwort):

ME.find({ pictures: { $gt: [] } })
Kommentare (8)

Nach weiterem Suchen, insbesondere in den mongodb-Dokumenten, und dem Zusammenpuzzeln von Teilen war dies die Antwort:

ME.find({pictures: {$exists: true, $not: {$size: 0}}})
Kommentare (7)

Das könnte auch bei Ihnen funktionieren:

ME.find({'pictures.0': {$exists: true}});
Kommentare (6)