当前位置: 首页 > 知识库问答 >
问题:

在MongoDB的集合中创建文档的最好方法是什么

仲孙德惠
2023-03-14

我将PHP和MySQL用于社交网络系统

我有MySQL表命名为member_feed,在这个表中我为每个成员保存提要,我的表结构是:

    |member_feed_id | member_id | content_id | activity_id |

在这个表中,我有超过1.2亿条记录,每个成员都有一套记录。

我目前的工作是从MySQL迁移到MongoDB,我是MongoDB的新手。所以我需要将此表转换为MongoDB中的集合。我想为member_feed表建立我的收藏,比如:

1-表格中的每一行member_feed作为文档,如:

{  "member_id: 1" , "content_id: 10" , "activity_id: 1" },
{  "member_id: 1" , "content_id: 11" , "activity_id: 2" },
{  "member_id: 1" , "content_id: 12" , "activity_id: 3" },
{  "member_id: 2" , "content_id: 9" ,  "activity_id: 4" },
{  "member_id: 2" , "content_id: 11" , "activity_id: 5" },
{  "member_id: 2" , "content_id: 14" , "activity_id: 6" }

所以这个收藏会有1.2亿记录

2- 具有成员 ID 的一个文档的所有成员源以及此成员的所有源

{
        member_id: '1',
        feeds: [
            { content_id: '10', 'activity_id' : 1 },
            { content_id: '11', 'activity_id' : 2 },
            { content_id: '12', 'activity_id' : 3 }
        ]

        member_id: '2',
        feeds: [
            { content_id: '9',  'activity_id' : 4 },
            { content_id: '11', 'activity_id' : 2 },
            { content_id: '14', 'activity_id' : 6 }
        ]
    }

因此,当我需要在他的仪表板上查看用户提要时,我会这样做:

从mongoDB中的文档中获取所有ID为$contentIdsFromMongo由member_id

2-在MySQL中运行查询以获取类似的内容

select * from content where content_id in($contentIdsFromMongo); 

而$ contentIdsFromMongo可能有10000个id,这对MySQL性能有影响吗?

我在服务器上有mongoDB,在另一台服务器上有MySQL

并且系统每秒钟都会为每个成员插入大量记录,所以我需要文档能够进行所有操作,如(插入、更新、选择、...)

为每个成员在集合中创建文档的最佳方法是什么,这种方法对使用mongoDB是对还是错

谢了。

共有1个答案

蓬长恨
2023-03-14

文档存储的数据建模中的两个主要注意事项:

  1. 数据将如何随着时间的推移而增长和变化,以及
  2. 应用程序将执行的查询类型。

您提供了有关数据预期增长方式的信息。基于此,我建议选择#1。

{  "member_id: 1" , "content_id: 10" , "activity_id: 1" }

但是,了解您将执行哪种查询以及您打算如何在应用程序中使用这些数据也很重要。

其他可能的选项有:

  • 每个成员一个文档,每个成员都有一个源数组
  • 按内容或活动 ID 对文档进行分组(如果这是应用程序查询数据的方式)。

所以总而言之,要想出一个最优模型,回答上面的问题2也很重要。

PS:鉴于您所描述的数据将如何增长,您问题中的选项2听起来绝对是个坏主意。

您也可以参考此链接以获取一些其他准则:http://docs.mongodb.org/manual/core/data-modeling/

 类似资料:
  • 我是第一次使用MongoDB,我对NoSQL数据库有一些经验。 我想在文档中创建一个集合。我无法使用MongoDB复制这种行为,因为我在文档中找不到代码。请问这种行为可能吗? 提前谢谢。

  • 有没有办法获取Firebase Firestore集合中最后创建的文档?我的要求是,当用户签名时,我必须在名为“history”的集合中添加一个文档;当用户注销时,我想用一个名为“注销”的字段更新该文档;因此,如果我得到最后添加的文档,它很容易更新。有没有办法做到这一点?

  • 他们推荐这种结构,但我看不出他们在哪里讨论有效地获取所有数据。 每个聊天文档都有属性、成员集合和消息集合: null null Firestore查询很肤浅,有时可能很棒。我的理解是,没有一种根深蒂固的方法来查询深度和获取嵌套集合。那么,什么是最好的实践和最省事的方法来做到这一点呢? 目前,我正在检索快照并将其映射到带有ID的对象,并通过附加的查询和映射将嵌套的集合数据添加到父文档数据上,我对我的

  • 本文向大家介绍详解MongoDB中创建集合与删除集合的操作方法,包括了详解MongoDB中创建集合与删除集合的操作方法的使用技巧和注意事项,需要的朋友参考一下 创建集合:createCollection() 方法  是用来创建集合. 语法: 基本的 createCollection() 命令语法如下: 在命令中, name 是要创建的集合的名称. Options 是一个文件,用于指定配置的集合 参

  • MongoDB 中的集合是一组文档的组合,类似于关系型数据库(例如 MySQL)中的数据表。集合存在于数据库中,且没有固定的结构,您可以向集合中插入不同格式或类型的数据。 在 MongoDB 中,您可以使用 createCollection() 方法来创建集合,语法格式如下: db.createCollection(name, options) 参数说明如下: name: 要创建的集合名称; op

  • 我需要创建一个fiRecovery文档,它也有一个集合,理想情况下是在单个写入操作中。 我在文档中没有看到类似的内容,因此,如果失败了,那么关于获取创建的文档id然后将多个文档添加到集合中有什么提示吗? 编辑:我正在用typescript/js开发