我不知道如何在 mongoDB 中构建这个数据库。
由于我的关系数据库背景,我认为数据库的结构如下:
2 个集合:
- 用户
- 基本 Prop ,包括
_id
- 基本 Prop ,包括
- 食谱
- 相关信息,例如标题、成分等
- 对用户文档的引用
如果我只是将用户的 _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/