当前位置:  开发笔记 > 编程语言 > 正文

如何在MongoDB中建模多对多关系(对于MySQL用户)

如何解决《如何在MongoDB中建模多对多关系(对于MySQL用户)》经验,为你挑选了1个好方法。

我来自一个MySQL背景,我正试图包裹我的头MongoDB.特别是,我正在努力概念化我应该如何建模n:n"Mongo方式"的关系.

对于这个例子,假设我们有两个collections:usersinterests.我们需要能够在数据中表示或查询几件事:

用户的兴趣

用户的兴趣评级,例如"喜欢"或"不喜欢"

具有特定兴趣的用户

每个利息评级的计数器(可递增/递减)

利息名称

MySQL,我会创建一个users_interests索引用户ID 兴趣ID的表.对于计数器,我会为每种评级类型设置单独的列,并且每次用户对兴趣进行评级/未评级时,都要完成一项事务以确保计数永远不会错误.

我试过阅读一些架构设计,但无济于事.

你能帮助失落的灵魂找到方向吗?



1> Petrogad..:

好问题.让我先概述一下N:N关系的工作原理,然后我将详细介绍每个要点.

在MySQL中N:N通常您的数据透视表与您的用户和兴趣(user_interests表)之间存在关联.在mongo你这样做有点不同.您仍然拥有用户和兴趣集合,但现在,您可以存储用户感兴趣的密钥列表.这样的事情:

User Collection {
      "name":"Josh",
      "user":"jsmith",
      "interests":[
           {
            "_id":12345,
            "rating":"like"
           },
           {..}..
      ]
}

通过将您的兴趣存储在您感兴趣的表格中的关键列表中,您可以执行所需的每项操作.如果您想进行查询,可以根据兴趣表中的ID进行查询,然后使用$ in修饰符进行查询.

现在为了您的兴趣收集我会做以下事情:

User Interest {
      "_id":objectId
      "label":"Swimming",
      "count":intValue
}

当向用户文档添加兴趣时,count变量将取决于您的评级的定义.如果您将评级存储在单独的区域(或逻辑)中,那么您分配给它们的值将与您感兴趣的int值相关.IE:用户对它进行评级(值为1)然后将计数值加1.

希望这是有用的,至少带来了一些关于如何构建它的其他想法!

祝你好运,记住MONGO真棒.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有