我可能会使用这样的模式,它将标签存储在字符串数组字段中:
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 的multikey http://www.mongodb.org/display/DOCS/Multikeys功能,并使用单个查找具有给定标签的电影find() http://www.mongodb.org/display/DOCS/Querying像这样查询:
db.movies.find( { tags: "dream" } )
正如您所说,还值得向多键数组添加索引以提高查询性能:
db.movies.ensureIndex( { tags: 1 } )