使用 SailsJS/MongoDB 从长列表中查找所有未使用选项的最佳方法

Optimal way of finding all unused options from a long list using SailsJS/MongoDB

我正在为学校的网站和移动应用程序构建一个新的 API 和数据库。因为该应用程序适用于还没有完全识字的非常年轻的 children,它为学校使用单一登录,然后允许学生通过选择他们老师的图标然后选择他们自己的图标来登录,而不是输入用户名或寻找他们的名字。

为了适应这一点,我们收集了大约 1200 个 kid-friendly 图标,以确保一个学生的图标与另一个学生的图标相同时不会出现重叠。

问题是,无论何时创建新学生或教师想要更改学生的图标,我们都必须取消选择该学校其他学生已经使用的任何图标的选项。

我解决这个问题的第一个倾向是 link 我的学校 table 到一个单独的 "availableIcons" table ,其中每一行都以可能的完整列表开头图标,每次添加学生时,该图标都会从可用图标列表中删除,对于已删除的学生,反之亦然。

这将避免服务器必须执行查看所有当前使用的图标并将它们与完整图标列表进行比较的工作,这听起来可能很慢,尤其是我们的一些学校有大约 500 名学生。

我对这种方法的担心是存储完整的图标列表,即使是数字键,似乎也会占用相当多的空间 space。根据我的计算,每所学校大约 2-4mb。这不是什么大不了的事,但如果有一种方法可以有效地做到这一点而不必存储每所学校的完整列表,我会更愿意这样做。

这都是使用SailsJS/MongoDB/waterline。

有什么建议吗?

谢谢!

可用图标是衍生数据。我不想将它存储在数据库中。

我的做法:

  1. 获取所有图标
  2. 获取特定学校和老师使用的所有图标
  3. 对这两个集合进行区分。考虑 _.difference

1200 个图标在内存中处理起来并不大。