我有收藏朋友
- userId: user id
- Friends: array of user ids
和用户
- _id: userId
- Last Login
- Other User info fields
如果用户正在浏览我的网站,则上次登录字段每 5 分钟更新一次。
现在我有逻辑,我从朋友集合中获取朋友的用户 ID,然后使用该 ID 查询用户集合以获取用户信息。
添加:此外,在未来的版本中,我会添加用户不仅可以添加用户,还可以添加其他集合中的宠物,因此朋友嵌入数组看起来像 {UserId, PetId}
但是对于下一个版本,我想添加新功能,我将显示按上次登录排序的朋友。
我认为可行的解决方案
- Map reduce on select - 易于实现,但可能会出现性能问题
- Map reduce on update - 在这种情况下,我可能会使用属性“out”在每次更新时写入新集合,所以我将拥有新集合Friend.reduced以及我需要的所有信息,然后我可以通过索引轻松查询它
- 将新属性 Last Update 添加到 Friends 列表集合,使其看起来像 {FriendId, LastUpdate} 逻辑很容易在业务级别上实现。
还有什么其他选择可以解决我的问题?