$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