Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储用户/项目特定数据的Mongodb模型_Mongodb_Mongoose - Fatal编程技术网

存储用户/项目特定数据的Mongodb模型

存储用户/项目特定数据的Mongodb模型,mongodb,mongoose,Mongodb,Mongoose,本案: 系统中有用户,也有静态文档(如书籍),每个用户可以处理一些文档,并对其每个文档具有特定的状态/设置(如文档中的当前位置/页面、书签/注释) 使用两个键userId和documentId在平面集合中存储用户和文档特定的信息,或者使用_id等于userId的集合和_id等于documentId的子文档嵌套数组(在该场景中,集合还用于存储非文档特定的用户数据),更好的方法是什么 第一个场景:查找({userId:…,documentId:…}) 第二个场景:通过({u id:…})查找,然后查

本案: 系统中有用户,也有静态文档(如书籍),每个用户可以处理一些文档,并对其每个文档具有特定的状态/设置(如文档中的当前位置/页面、书签/注释)

使用两个键userId和documentId在平面集合中存储用户和文档特定的信息,或者使用_id等于userId的集合和_id等于documentId的子文档嵌套数组(在该场景中,集合还用于存储非文档特定的用户数据),更好的方法是什么

第一个场景:查找({userId:…,documentId:…})

第二个场景:通过({u id:…})查找,然后查找{u id等于documentId的子文档

第一种方案的优点:

1) 我相信更快的查找和保存操作

第一种情况的缺点:

1) 大量文件

2) 无法在集合中存储某些与文档无关的用户特定数据

第二种情况的优点:

1) 更好地表示数据关系(尽管主观)

2) 使使用同一集合存储其他一些与文档无关的用户数据成为可能

第2条的反对意见:

1) 更难的搜索和更难的保存操作(我使用的是Mongoose ODM,代码不会很复杂),而且我认为操作的速度不如第一个场景

需要考虑的一些事项:

1) 通常,在读取操作中,我只需要选择一个特定于文档的数据

2) 我通常需要保存一个文档特定的数据(例如,定期保存用户正在处理的文档中的位置)

3) 用户/文档状态可能有一些必须更改的嵌套数组(书签、注释)(插入/删除文档)


考虑到这一点,我想说第一种方案更适合该任务,但我想听听专业人士的意见,无论两种方案是否有很大差异。

您的实际访问路径是什么?您是否从用户id开始,并查找用户读取的文档?还是从一个文档开始搜索阅读它的用户? 文档对象是轻量级的(只是标题和作者等信息)还是重量级的(包括内容)? 如果文档是重量级的,我会将它们保存在单独的集合中,然后使用场景2

基本上,场景1模仿关系解决方案,场景看起来像一个对象模型

我相信对象模型能更好地描述现实,而且效率更高


所以我选择场景2,除非你经常在读者中搜索一本书。

一般来说,不要担心写性能。优化您的查询。@Esteban Araya谢谢,但“优化查询”是什么意思?对于第一个或第二个场景,您是否有任何偏好,您会选择哪一个?文档状态不重,常见的场景我需要一次获取一个(一个用户一个文档状态)。我不需要经常为某个特定文档获取用户,至少它肯定不是应用程序的实时场景。我经常需要做的是保存特定文档的状态。