我是MongoDB的新手.我有一个关于MongoDB性能的设计问题.假设我有类电影有两个属性,名称和导演.另外我想标记这个电影类.最好为这个类添加一个新的strings []属性,或者创建一个新的类MovieTags?我知道我会查询这个标签很多,因为我会在UI上使用自动完成功能.对于这个自动完成功能,我只需要标签,而不是Movie对象.什么选择更好?添加一个strings []的属性或引用MovieTags的集合?考虑性能......当然,在这两种情况下都会进行索引编制.
我应该使用MapReduce吗?如果我使用一个embebed string []对象,只为自动完成功能选择标签?怎么样?
谢谢!
我可能会使用这样的模式,它将标记存储在字符串数组字段中:
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" ]
})
Run Code Online (Sandbox Code Playgroud)
对于这种类型的查询,您不需要map-reduce.通过在电影文档中嵌入标记,您可以利用MongoDB的多键功能,并使用单个find()查询查找具有给定标记的电影,如下所示:
db.movies.find( { tags: "dream" } )
Run Code Online (Sandbox Code Playgroud)
就像你说的那样,为多键数组添加一个索引以提高查询性能也是值得的:
db.movies.ensureIndex( { tags: 1 } )
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1973 次 |
| 最近记录: |