おそらく、タグを文字列配列フィールドに格納する次のようなスキーマを使用します。
db.movies.insert({
name: "The Godfather",
director: "Francis Ford Coppola",
tags: [ "mafia", "wedding", "violence" ]
})
db.movies.insert({
name: "Pulp Fiction",
director: "Quentin Tarantino",
tags: [ "briefcase", "violence", "gangster" ]
})
db.movies.insert({
name: "Inception",
director: "Christopher Nolan",
tags: [ "dream", "thief", "subconscious" ]
})
このタイプのクエリではmap-reduceは必要ありません。映画ドキュメント内にタグを埋め込むことで、MongoDBのマルチキー を利用できます。 機能を使用し、単一の find() を使用して特定のタグを持つ映画を検索します このようなクエリ:
db.movies.find( { tags: "dream" } )
また、おっしゃるように、クエリのパフォーマンスを向上させるために、マルチキー配列にインデックスを追加することも価値があります。
db.movies.ensureIndex( { tags: 1 } )