嘿 我现在有一个问题,试图弄清楚如何解决Mongo中特定的多对多模型。
我正在为我正在构建的CRM建立一个事件调度系统,允许将事件分配给用户和团队。这些事件对每个领导都是特别的。
例如,我周四下午5点与Jimmy Dolittle打电话。我的销售团队周四上午7点还与鲍勃·琼斯打电话。
如果这是SQL,我只会创建一个潜在客户表,事件表,用户表和团队表。我正在考虑将事件放在用户集合和团队集合中,但是当我有一个潜在客户列表并希望在每个潜在客户旁边显示回调日期时,就会出现问题。像Mongo那样的引用将是一个含有500个潜在客户的列表。
我还考虑将事件存储在潜在客户集合中,但这意味着我必须对分配给特定用户或团队的事件进行相同类型的潜在客户搜索(数据库中可能有500,000个潜在客户)但只有500人拥有特定用户的活动。
答案 0 :(得分:2)
这种关系在Mongo中将成为一个问题。在那种情况下,我可能会编写一个函数来在应用程序级别连接这些对象。每当建立连接时,将关系保存在两个对象中。然后,您可以轻松搜索任一方向。您将拥有冗余数据并导致使它们不同步的风险,但这是您必须使用非关系结构支付的价格。您的更新速度不会太快,因为您必须更新两个文档,但您的选择应该很快。
答案 1 :(得分:0)
蒂姆建议一个好主意是在应用程序级别解决这个问题。
我在这里做的是创建一个新的集合'Events'然后将_id的相关事件数组存储在用户和团队对象中,从这里可以超级快速地查找。这可能意味着更多的查询,但仅在_id字段上的查询是高度优化的,而不是非常耗费资源(除非您每个用户有数百万个事件),因此如果团队有应用程序,他们可以看到他们的事件,如果用户有他们可以看到他们的活动。
另外,我建议在事件对象中存储用户和团队_id的链接。是的,这是冗余数据,但它只是一个参考,如果在应用程序级别正确管理,应该保持架构整洁。
最好的运气。