在用户关注系统中关注人和被关注人是多对多关系,在关系型数据库中我们很容易通过中间表关联实现这个功能。关注和取消关注无非就是对这个中间表的记录的增加和删除。那么在mongodb中如何实现这种多对多关系呢?我们知道关注操作就是被关注操作的逆操作,当用户A关注用户B的时候,也就是用户B被用户A关注了。那么我们可以在用户文档中维护一个用户关注的用户集合followings:

1
2
3
4
5
6
7
8
{
username: 'A',
followings: [ObjectId]
},
{
username: 'B',
followings: [ObjectId]
}

  1. 那么用户A关注的B的操作我们就可以这么写了:
    1
    2
    3
    4
    5
    6
    var b = db.users.findOne({ username: 'B' });
    db.users.updateOne(
    { username: 'A' },
    {
    $push: { followings: b._id }
    })
  2. 那么用户A取消关注的B的操作我们就可以这么写了:
    1
    2
    3
    4
    5
    6
    var b = db.users.findOne({ username: 'B' });
    db.users.updateOne(
    { username: 'A' },
    {
    $pull: { followings: b._id }
    })