用mongodb设计关系数据
我正在构建一个使用Mongo的应用程序,我的背景是SQL数据库。 需要NOSQL文档专家的帮助 域关系包括:用mongodb设计关系数据,mongodb,mongodb-query,nosql,Mongodb,Mongodb Query,Nosql,我正在构建一个使用Mongo的应用程序,我的背景是SQL数据库。 需要NOSQL文档专家的帮助 域关系包括: User submitted many Links Links has many Stars from different Users User starred many Links 首先,让我告诉你我需要什么样的查询 下面的“结果”并没有映射mongo模式,这正是我想要的响应 返回所有提交的链接,并带有一个标志,表明用户是否已使用该链接 返回由用户加星号的所有链接 我的第一个想法是使
User submitted many Links
Links has many Stars from different Users
User starred many Links
首先,让我告诉你我需要什么样的查询
下面的“结果”并没有映射mongo模式,这正是我想要的响应
返回所有提交的链接,并带有一个标志,表明用户是否已使用该链接
返回由用户加星号的所有链接
我的第一个想法是使用链接中的嵌入文档来包含所有带星号的用户
链接架构:
{ id: MongoObjectId, url: String, stars: Number, starred: [ { userId: MongoObjectId }] }
但是通过研究文档中的长度限制,16MB我驳斥了这种方法。
那么,还有什么?使用其他收集星
星型模式
{ id: MongoObjectId, link: { url: String }, user: { id: MongoObjectId } }
这个想法很简单,复制星体内部的链接信息。缺点是,我会用相同的信息将我的数据库分解给每个启动链接的用户
恢复我所拥有的:
Links Collection
{ id: MongoObjectId, url: String, stars: Number, starred: [ { userId: MongoObjectId }] }
Stars Collection
{ id: MongoObjectId, link: { url: String }, user: { id: MongoObjectId } }
如何返回一个标志,指示用户是否在链接上加了星号?有更好的建模方法吗
谢谢大家。经验法则:当你用“每句话都有很多”这个词来描述你的数据时,你应该使用关系数据库。但是@Philipp,每个真正的应用程序都包含关系数据。你是说你只能在没有关系数据的情况下使用mongo,比如日志、事件?真正的应用程序不能使用mongo db吗?感谢MongoDb并非事事如意。你读过MongoDb的DB建模文档吗?这些选项都包含了每个选项的考虑因素。嘿@wiredparie,非常感谢您的链接。我同意你的观点。但想象一下,这是强加给你的一项要求。你是如何做到的?我无法满足的第二个查询是无法对数据进行规范化,缺点是会用重复的数据破坏数据库。第一个查询,我不知道没有两个查询怎么办。可能需要发送两个查询。这是个问题吗?
{ id: MongoObjectId, link: { url: String }, user: { id: MongoObjectId } }
Links Collection
{ id: MongoObjectId, url: String, stars: Number, starred: [ { userId: MongoObjectId }] }
Stars Collection
{ id: MongoObjectId, link: { url: String }, user: { id: MongoObjectId } }