mongodb - 构建 mongoDB 对象数据库

标签 mongodb database-design object-oriented-database database

我不知道如何在 mongoDB 中构建这个数据库。 entity relational model recipe database

由于我的关系数据库背景,我认为数据库的结构如下:
2 个集合:

  1. 用户
    • 基本 Prop ,包括_id
  2. 食谱
    • 相关信息,例如标题、成分等
    • 对用户文档的引用

如果我只是将用户的 _id (或使用正确的 DBRef )扔到菜谱的 uploaded_by 字段中,则很难进行 join-类似操作。 具体来说,我需要获取所有食谱的用户名。我将返回具有以下格式的对象数组:

{title:'chocolate chip cookies',
desc:'yummy soft cookies',
uploaded_by:'john doe'}

为此,我是否必须对每个配方进行查询,以根据引用查找用户的名称,然后返回包含用户名称和其他信息的自定义对象?这听起来太昂贵了,让我觉得我应该坚持使用关系数据库。有没有更有效的方法来做到这一点?

最佳答案

克里斯,

我建议你按照你的想法去做。

mongodb 的强大之处在于拥有非规范化数据(相对于规范化数据,其目标是最大限度地减少冗余)。当您查询 mongo 数据时,您只想查询数据库一次,然后获取您需要的所有内容。如果您需要的数据分布在多个集合中,则在 mongodb 中无法执行此操作(至少据我所知没有有效的方法)。我认为您应该考虑在您的 Recipes 集合中添加一个“uploaded_by”字段,其中包含上传者的格式化名字/姓氏(正如您所得出的结论)。您还需要为每个用户提供一个字段(例如 uploaded_recipes),其中包含每个用户已上传的食谱的标识符(或标识符集合)。这样,您就不需要对数据执行联接。这将是设置数据库的“mongodb 方式”。

为了解决您的持久性问题,需要以不同的方式处理处理用户名更改的过程。实现对用户文档的更改的过程还必须更新用户上传的每个菜谱的“uploaded_by”字段(您遍历该用户的 uploaded_recipes 字段)。这里的想法是增加插入过程的复杂性,以简化和改进对数据库的查询。

关于mongodb - 构建 mongoDB 对象数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22749372/

相关文章:

node.js - dust.js 通过函数格式化文本

mongodb - 多个 mongodb 服务器被视为一个和数据流管理

database-design - 数据库架构设计

angular - 连接为 Meteor 客户端的 Ionic UI 的简单示例?

php - 数据库中的 200 个表太多了吗?

mysql - 如何解析以下数据库模式

orm - 使用 db4o 的示例网站

java - 如何存储文件数据行并通过它的方法计算成字母并在另一个文件中打印字母等级?

rdbms - 嵌入式nosql开源java数据库

python - PyMongo:更新,$multi:false,获取更新文档的 _id?