我不知道如何在mongoDB中构建这个数据库。
由于我的关系数据库背景,我认为数据库的结构如下:
2个系列:
_id
如果我只是将_id
从用户(或使用正确的DBRef)扔到uploaded_by
字段中以获取配方,则很难进行类似连接的操作。 具体来说,我需要获取所有食谱的用户名。我将返回一个具有以下格式的对象数组:
{title:'chocolate chip cookies',
desc:'yummy soft cookies',
uploaded_by:'john doe'}
为此,我是否必须对每个配方进行查询以根据引用查找用户名,然后返回带有用户名的自定义对象以及其他信息?这听起来太昂贵,让我觉得我应该坚持关系数据库。有没有更有效的方法来做到这一点?
答案 0 :(得分:2)
克里斯,
你的想法就是我的建议。
mongodb的强大功能来自于非规范化数据(与规范化数据相比,其目标是最小化冗余)。当您向mongo查询数据时,您只想查询数据库一次,并获取所需的所有内容。如果您需要将数据分布在多个集合中(至少没有我知道的有效方式),那么在mongodb中无法做到这一点。我认为你应该考虑有一个" uploaded_by" 食谱集合中的字段,其中包含上传者的格式化名字/姓氏(如您所述)。您还需要为每个用户(例如,uploaded_recipes)提供一个字段,其中包含每个用户上传的食谱的标识符(或标识符集合)。这样,您就不需要对数据执行连接。这将是" mongodb方式"设置数据库。
要回答持久性问题,需要以不同方式处理处理用户名称更改的过程。实现对用户文档的更改的过程还必须更新" uploaded_by"用户上传的每个食谱的字段(您遍历该用户的uploaded_recipes字段)。这里的想法是,您为插入过程增加了复杂性,以简化和改进对数据库的查询。