Вероятно бих избрал схема като тази, която съхранява таговете в поле за низов масив:
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 за този тип заявка. Като вградите таговете в документа на филма, можете да се възползвате от multikey на MongoDB функция и намиране на филми с даден етикет с помощта на единичен find() заявка по следния начин:
db.movies.find( { tags: "dream" } )
И както казахте, също си струва да добавите индекс към масива с множество ключове, за да подобрите производителността на заявките:
db.movies.ensureIndex( { tags: 1 } )