MongoDB:存储数据以供读取的最有效方式。数组还是单个项目?

MongoDB: The most efficient way to store data for reading. Array or Individual Items?

提问人:gustv0 提问时间:11/17/2023 最后编辑:gustv0 更新时间:11/18/2023 访问量:38

问:

我正在寻找最有效的方法来存储数据以供读取。

我有 N 个用户,每个用户可以分配给 N 个事件。

这里重要的是,我可以快速获取使用特定名称注册的所有事件。值得一提的是,这个基数预计会增长很多,许多用户每个用户至少有几十个事件。

最初,我考虑为事件设置一个单独的集合,每个事件都将是一个具有user_id引用的对象。

事件对象:

{
   "_id": ObjectId("..."),
   "event_name": "event.name.example",
   "user_id": ObjectId("...")
}

有了这个,我可以使用event_name字段(将有一个索引)查询事件集合,并且可以获取分配给我正在寻找的事件的所有用户。

我想象的另一种方式是拥有一个用户集合,每个用户对象都有一个事件数组。

用户对象:

{
   "_id": ObjectId("..."),
   "user_name": "example",
   "events": [
     "event.name.example.one",
     "event.name.example.two",
     "event.name.example.three"
   ]
}

但这似乎并不那么有效,因为查询必须遍历所有查找字符串的用户的所有事件。我错了吗?

这两种方法中哪一种最有效,并且遵循最佳实践?

MongoDB的

评论

0赞 Joe 11/18/2023
在第二个示例中,如果“events”数组上有索引,则可以查询该索引。假设事件名称完全匹配,索引扫描将从第一个匹配名称开始,并且仅扫描,直到找到不匹配的名称。这里真正的问题是,您在此查询中寻找哪些信息?
0赞 gustv0 11/18/2023
@Joe感谢您的帮助!当事件发生时,我需要知道哪些用户被分配到该事件,因此我需要根据事件的名称进行此查询。

答: 暂无答案