MongoDB设计 - 标签

elr*_*anu 5 .net mongodb norm

我是MongoDB的新手.我有一个关于MongoDB性能的设计问题.假设我有类电影有两个属性,名称和导演.另外我想标记这个电影类.最好为这个类添加一个新的strings []属性,或者创建一个新的类MovieTags?我知道我会查询这个标签很多,因为我会在UI上使用自动完成功能.对于这个自动完成功能,我只需要标签,而不是Movie对象.什么选择更好?添加一个strings []的属性或引用MovieTags的集合?考虑性能......当然,在这两种情况下都会进行索引编制.

我应该使用MapReduce吗?如果我使用一个embebed string []对象,只为自动完成功能选择标签?怎么样?

谢谢!

Chr*_*tow 5

我可能会使用这样的模式,它将标记存储在字符串数组字段中:

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)

  • 这似乎并没有真正回答他的问题.您将如何获得整个电影收藏中使用的独特标签列表? (5认同)