私のすべてのレコードには、"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: [] } })