gpt4 book ai didi

mongodb - 在 mongodb 中编辑子文档 N-N 关系

转载 作者:IT老高 更新时间:2023-10-28 13:37:47 26 4
gpt4 key购买 nike

我有一个应用程序,其中一个文章可以链接到多个平台

文章包含平台列表,平台也包含文章列表。

有关更多详细信息,请查看我几个月前提出的这个 stackoverflow 问题。

https://stackoverflow.com/a/40377383/5770147

问题是关于如何创建文章并实现文章和平台之间的 N-N 关系。

我有创建文章和删除文章设置,以便平台中的列表也会更新。

如何编辑文章,以便更新链接到文章的平台?

为了创建和编辑链接平台,我使用了一个可以选择多个选项的下拉菜单。必要的代码可以在之前链接的问题中找到。

最佳答案

根据您提供的信息,我会推荐两种可能的方法,从相同的基础开始:

Use two collections (articles and platforms) and store only a reference to platform documents in an array defined on article documents

如果出现以下情况,我会推荐这种方法:

  • 您的两个文章文档的基数都很高,并且平台
  • 您希望能够独立管理这两个实体,同时还同步它们之间的引用

    // articles collection schema
    {
    "_id": ...,
    "title": "I am an article",

    ...

    "platforms": [ "platform_1", "platform_2", "platform_3" ],
    ...
    }


    // platforms collection schema
    {
    "_id": "platform_1",
    "name": "Platform 1",
    "url": "http://right/here",
    ...
    },

    {
    "_id": "platform_2",
    "name": "Platform 2",
    "url": "http://right/here",
    ...
    },

    {
    "_id": "platform_3",
    "name": "Platform 3",
    "url": "http://right/here",
    ...
    }

即使这种方法非常灵活,它也是有代价的 - 如果您需要文章和平台数据,您将不得不对您的 MongoDB 实例发起更多查询,因为数据被分成两个不同的集合。

例如,在加载文章页面时,考虑到您还想显示 platforms 列表,您将不得不向 articles 集合 发起查询,然后还触发对 platforms 集合 的搜索,以通过 article 上的 platforms 数组的成员检索该文章发布到的所有平台实体文档

但是,如果您在加载 article 文档 时只有一小部分经常访问的 平台属性 可用,则可以增强 articles 集合 上的platforms 数组来存储这些属性以及对平台文档的_id 引用:

// enhanced articles collection schema  
{
"_id": ...,
"title": "I am an article",

...

"platforms": [
{platform_id: "platform_1", name: "Platform 1"},
{platform_id: "platform_2", name: "Platform 2"},
{platform_id: "platform_3", name: "Platform 3"}
],

...

}

如果您经常检索以与文章特定数据一起显示的 平台数据属性 不经常更改,则这种混合方法将是合适的。

否则,您必须将所有对 platforms 集合 中的 platform 文档属性 所做的更新与您作为其中一部分跟踪的属性子集同步文章文档的平台数组。

关于各个平台的文章列表管理,我不建议在两个集合中存储 N 对 N 引用,因为上述机制已经允许您通过查询 articles 集合来提取文章列表 使用带有 platform document_id 值的查找查询:

Approach #1
db.articles.find({"platforms": "platform_1"});

Approach #2:
db.articles.find({"platforms.platform_id": "platform_1"});

在介绍了两种不同的方法之后,我现在建议您分析应用程序的查询模式和性能阈值,并根据您遇到的场景做出计算决策。

关于mongodb - 在 mongodb 中编辑子文档 N-N 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42139856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com