$size
演算子を使うとよい。
http://docs.mongodb.org/manual/reference/operator/query/size/
例えばブログの記事のコレクションがあったとする。
{ "_id": ObjectId("53c5339ab967a1dd52f52402"), "title": "Rubyでhogehoge", "tags": [ "ruby", "programing", "rails" ], "body": "..." } { "_id": ObjectId("53c5339ab967a1dd52f52403"), "title": "MongoDBでfugafuga", "tags": [ "mongodb", "database" ], "body": "..." }
タグがちょうど2つ付いた記事を検索したいときは以下のようにする。
db.blogs.find({ "tags": { $size: 2 } }); // { "_id": ObjectId("53c5339ab967a1dd52f52403"), ... }
Mongoidだと with_size
というのを使うと抽出できる。
http://mongoid.org/en/origin/docs/selection.html
Blog.where(:tags.with_size => 2) Blog.with_size(tags: 2)
参考:
http://stackoverflow.com/questions/4705024/mongodb-query-based-on-count-of-embedded-document