$size 演算子を使用して、配列サイズでクエリを実行できます。JS シェルを使用した次の例を考えてみましょう。
> db.foo.drop()
> db.foo.insert({_id: 1, x:[1,2]});
> db.foo.insert({_id: 2, x:[]});
> db.foo.insert({_id: 3, x:3});
> db.foo.find({x: {$size: 0}})
{ "_id" : 2, "x" : [ ] }
> db.foo.find({x: {$size: 1}})
> db.foo.find({x: {$size: 2}})
{ "_id" : 1, "x" : [ 1, 2 ] }
> db.foo.find({x: {$not: {$size: 2}}})
{ "_id" : 2, "x" : [ ] }
{ "_id" : 3, "x" : 3 }
> db.foo.find({x: {$not: {$size: 0}}})
{ "_id" : 1, "x" : [ 1, 2 ] }
{ "_id" : 3, "x" : 3 }
私は Mongoid に詳しくありませんが、このドキュメントで使用する例を見つけ$size
ました。
2 つの注意点$size
は、インデックスを利用できないこと (クエリの他の部分は確かに利用できます) と、範囲クエリでは使用できないことです。追加の簿記を気にしない場合、実行可能なオプションは、配列のサイズを別のフィールド (おそらくインデックス付き) に格納し、好きな方法でクエリを実行することです。