想法如何在mongodb中查询两个集合

时间:2013-11-02 22:52:31

标签: mongodb

我有朋友

的集合
- userId: user id
- Friends: array of user ids

用户

- _id: userId
- Last Login
- Other User info fields

如果用户正在浏览我的网站,则每5分钟更新一次上次登录字段。

现在我有逻辑,我从朋友集合的朋友那里获取用户ID,然后使用该ID查询用户集合以获取用户信息。

增加:此外,在未来的版本中,我想补充说,用户不仅可以添加朋友,还可以添加来自其他集合的宠物,因此朋友嵌入式阵列看起来像{UserId,PetId}

但是对于下一个版本,我想添加新功能,我会按照上次登录的顺序显示朋友。

我认为可行的解决方案

  1. 选择地图缩小 - 易于实施但可能会遇到性能问题
  2. 在更新时映射减少 - 在这种情况下,我可能会使用属性“out”在每次更新时编写新集合,因此我将使用我需要的所有信息创建新集合 Friend.reduced ,然后我可以通过索引轻松查询
  3. 添加新属性Last Update to Friends列表集合,使其看起来像{FriendId,LastUpdate}逻辑将很容易在业务级别实现。
  4. 还有哪些其他方法可以解决我的问题?

1 个答案:

答案 0 :(得分:1)

如下所示的简单查询不起作用?

var someId = ObjectId("52758653cbd6ca816ca0ee1b")
var friends = db.friends.findOne({"userId": someId}, {"_id": 0, "friends": 1}).friends

db.users.find(
    {_id: {$in: friends }}
).sort({lastLogin: -1})