mongodb下n:m关系
在用户关注系统中关注人和被关注人是多对多关系
,在关系型数据库中我们很容易通过中间表关联实现这个功能。关注和取消关注无非就是对这个中间表的记录的增加和删除。那么在mongodb
中如何实现这种多对多关系呢?我们知道关注操作
就是被关注操作
的逆操作,当用户A
关注用户B
的时候,也就是用户B
被用户A
关注了。那么我们可以在用户文档中维护一个用户关注的用户集合followings
:1
2
3
4
5
6
7
8{
username: 'A',
followings: [ObjectId]
},
{
username: 'B',
followings: [ObjectId]
}
- 那么用户
A
关注的B
的操作我们就可以这么写了:1
2
3
4
5
6var b = db.users.findOne({ username: 'B' });
db.users.updateOne(
{ username: 'A' },
{
$push: { followings: b._id }
}) - 那么用户
A
取消关注的B
的操作我们就可以这么写了:1
2
3
4
5
6var b = db.users.findOne({ username: 'B' });
db.users.updateOne(
{ username: 'A' },
{
$pull: { followings: b._id }
})