配列フィールドが空ではないMongoDBレコードの検索

私のすべてのレコードには、"pictures"というフィールドがあります。このフィールドは文字列の配列です。

私は今、この配列が空ではない最新の10件のレコードを求めています。

いろいろ調べてみたのですが、不思議なことにあまり見つかりませんでした。 WHEREという選択肢もあるようですが、ネイティブ関数に比べてどれだけ時間がかかるのか、もっと良い解決策はないのかと思っています。

それにしたって、うまくいきません。

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

何も返ってきません。this.pictures` に長さのビットを入れないでおくとうまくいきますが、当然ながら空のレコードも返します。

ソリューション

また、キーがないドキュメントがある場合は

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

MongoDBは$sizeが関係する場合はインデックスを使わないので、ここではより良い解決策を示します。

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

MongoDB 2.6 リリース以降、演算子 $gt で比較できるようになりましたが、予想外の結果になる可能性があります (詳細な説明は この回答 にあります)。

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

さらに、特にmongodbのドキュメントを見て、いくつかのパーツを組み合わせてみたところ、これが答えでした。

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

これも、あなたのためになるかもしれません。

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