Eri*_*tra 5 relationship mongoose mongodb async.js subdocument
我有一个应用程序,其中一篇文章可以链接到多个平台.
文章包含平台和平台列表,还包含文章列表.
有关更多详细信息,请查看几个月前我问过的stackoverflow问题.
问题是如何创建文章和实现文章和平台之间的NN关系.
我有创建文章和删除文章设置,以便列表在平台中更新.
如何实现编辑文章,以便更新哪些平台链接到文章?
为了创建和编辑链接平台,我使用下拉菜单,其中可以选择多个选项.必要的代码可以在先前链接的问题中找到.
根据您提供的信息,我会建议两种可能的方法,从同一个基础开始:
使用两个集合(文章和平台)并仅在文章文档中定义的数组中存储对平台文档的引用
如果符合以下条件我会推荐
您希望能够独立管理两个实体,同时还可以同步它们之间的引用
// 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",
...
}
Run Code Online (Sandbox Code Playgroud)即使这种方法非常灵活,也需要付出代价 - 如果您需要文章和平台数据,则必须向MongoDB实例发出更多查询,因为数据分为两个不同的集合.
例如,在加载文章页面时,考虑到您还想显示列表platforms,您必须向其发出查询articles collection,然后触发搜索platforms collection以检索该文章发布的所有平台实体通过platforms数组的成员article document.
但是,如果您只有一小部分经常访问的子集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"}
],
...
Run Code Online (Sandbox Code Playgroud)
}
如果platform data attributes您经常检索以与文章特定数据一起显示的内容不经常更改,那么这种混合方法将是合适的.
否则,你将不得不被对所做的所有更新同步platform document attributes在platforms collection与您跟踪的平台数组文章文件的一部分属性的子集.
关于单个平台的文章列表的管理,我不建议在两个集合中存储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"});
Run Code Online (Sandbox Code Playgroud)
提出了两种不同的方法,我现在建议您分析应用程序的查询模式和性能阈值,并根据您遇到的方案做出计算决策.
| 归档时间: |
|
| 查看次数: |
235 次 |
| 最近记录: |