我有一个应用程序,其中文章可以链接到多个平台。
文章包含平台列表,平台也包含文章列表。
有关更多详细信息,请查看我几个月前问的这个stackoverflow问题。
https://stackoverflow.com/a/40377383/5770147
问题是如何创建文章以及如何实现文章与平台之间的N-N关系。
我有“创建文章”和“删除文章设置”,以便列表也在平台中更新。
如何实现编辑文章,以便可以更新链接到文章的平台?
为了创建和编辑链接的平台,我使用一个下拉菜单,可以在其中选择多个选项。可以在先前链接的问题中找到必要的代码。
最佳答案
根据您提供的信息,我将建议从相同的基础开始的两种可能的方法:
如果出现以下情况,我将推荐这种方法:
平台
还在它们之间同步引用
// 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 collection
发起查询,然后触发platforms collection
的搜索以检索该平台所针对的所有平台实体文章是通过platform
上article document
s数组的成员发布的。但是,如果只有很少一部分经常访问的
platform attributes
子集,而在加载article document
时需要具备该子集,则可以增强platforms
上的articles collection
数组,以存储这些属性,以及对平台文档的_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"}
],
...
}
如果您经常检索以与商品特定数据一起显示的
platform data attributes
的更改不那么频繁,则此混合方法将是合适的。否则,您将必须将对
platform document attributes
中的platforms collection
进行的所有更新与您作为文章文档的platform数组的一部分跟踪的属性子集进行同步。关于各个平台的文章列表的管理,我不建议在两个集合中存储N对N引用,因为上述机制已经允许您通过使用
articles collection
值为的查找查询来查询_id
来提取文章列表。 platform document
: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/