.net MongoDB设计-标签

.net MongoDB设计-标签,.net,mongodb,norm,.net,Mongodb,Norm,我是MongoDB的新手。我有一个关于MongoDB性能的设计问题。假设我有两个属性的类电影,名字和导演。我还想标记这个电影类。更好的做法是向这个类添加一个新的属性strings[],还是创建一个新的类MovieTags我知道我会经常查询这些标签,因为我会在UI上使用自动完成。对于此自动完成功能,我只需要标签,而不需要电影对象。 哪种选择更好?添加字符串[]的属性或对电影集的引用?在表演中思考。。。当然,在这两种情况下都会进行索引 我应该使用MapReduce吗?如果使用Embed string

我是MongoDB的新手。我有一个关于MongoDB性能的设计问题。假设我有两个属性的类电影,名字和导演。我还想标记这个电影类。更好的做法是向这个类添加一个新的属性strings[],还是创建一个新的类MovieTags我知道我会经常查询这些标签,因为我会在UI上使用自动完成。对于此自动完成功能,我只需要标签,而不需要电影对象。 哪种选择更好?添加字符串[]的属性或对电影集的引用?在表演中思考。。。当然,在这两种情况下都会进行索引

我应该使用MapReduce吗?如果使用Embed 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" ]
})
对于这种类型的查询,您不需要MapReduce。通过将标记嵌入电影文档中,您可以利用MongoDB的功能,并使用以下单个查询查找具有给定标记的电影:

db.movies.find( { tags: "dream" } )
正如您所说,还值得向多键数组添加索引以提高查询性能:

db.movies.ensureIndex( { tags: 1 } )

您始终可以筛选作为查询结果一部分返回的字段

详细说明如何操作的文档链接如下:


这将使您能够过滤掉电影对象中您不感兴趣的部分

可能重复的可能重复的问题,这是你选择洞电影对象,当我只需要标签的自动完成。你确定这更快吗?这似乎并没有回答他的问题。您将如何获得整个电影收藏中使用的标签的独特列表?这将为您提供一个独特的标签列表:
db.test.distinct('tags')