【发布时间】:2016-01-06 01:44:00
【问题描述】:
我正在使用 mongodb mongoose 构建一个具有三个资源的简单照片存储应用程序:
- 用户
- 专辑
- 照片
所有身份验证都由passportjs处理。
使用parent references,一个用户可以有很多相册,一个相册可以有很多照片。
每个相册都有不同的隐私设置:
- 私人 - 只有创建者才能看到它
- 公开 - 任何人都可以看到
- 好友 - 只有 (facebook) 好友才能看到它
当我查询许多专辑时,我想根据登录的用户查看这 3 个专辑的混合,但我的问题是我应该如何检查登录的用户是否是创建者的 Facebook 朋友?
Facebook 提供了endpoint 来检查 2 个用户是否是朋友,但这意味着遍历一个集合并对每个用户发出请求并过滤结果,然后最终返回它们,这对我来说似乎很费劲工作。
另一种方法(仍然没有缺陷):
- 用户注册并允许该应用获取已在使用该应用的朋友
- 将这些好友 _id 存储在用户的数组中
- 当用户创建相册时,将此数组的副本保存到相册上的字段中
- 使用已登录用户 ID 的 $in 运算符进行查询
优点:
- 列表项
- 快速检查用户是否是创建相册的用户的好友
- Facebook 不需要额外的请求
缺点:
好友列表设置一次,所以如果好友列表发生变化,则需要以某种方式进行更新
好友列表位于多个位置(在用户和 x 个相册上),因此需要以某种方式在所有这些位置进行更新
- 当新朋友注册时,可能已经在应用程序上有朋友,我们需要找到每个朋友并将新朋友添加到他们的朋友列表中,并在需要时删除。
这些是我能想到的唯一方法,任何人都可以提供新方法或改进上述方法吗?也许我在看这个完全错误的方式,并且使用其他一些 mongo 功能有一个非常简单的解决方案?
【问题讨论】:
标签: node.js facebook mongodb facebook-graph-api mongoose