.net - MongoDB 设计 - 标签

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

我应该使用 MapReduce 吗?如果我使用嵌入字符串 [] 对象,仅选择标签,用于自动完成功能?如何?

谢谢!

最佳答案

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

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特征,并使用单个 find() 查找具有给定标签的电影像这样查询:

db.movies.find( { tags: "dream" } )

就像你说的,还值得为多键数组添加索引以提高查询性能:

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

https://stackoverflow.com/questions/6074720/

相关文章:

node.js - 如何在没有回调的情况下返回 Mongoose 查询结果

javascript - UnhandledPromiseRejectionWarning 错误 :

MongoDB - 我可以使用 ObjectId 作为键吗?

ruby - 带有 eventmachine 的 mongoid 和 mongomapper

ruby - 是否可以指定查询应在 Mongoid 中使用的索引?

mongodb - Java MongoDB 驱动连接问题

php - MongoDB给出奇怪的连接错误

c# - MongoDB:如何在 C# 中使用嵌套数组加载集合?

javascript - 获取集合和子文档中所有键的名称

mongodb - .NET 是否有与数据库无关的 nosql 框架?