我需要使用 Spring Data 在 MongoDB 中为用户存储朋友关系。我的“模式”解决方案是将朋友的用户名(也是_id)存储在用户文档中。我没有使用 DBRef,因为 Spring Data 和 DBRef 在自我关系上似乎存在问题(朋友是用户:p)。一个简单的用户文档是这样的:
{
"_id" : "user1",
"email" : "user1@test.com",
"friendRequests" : {
"user4" : 0
},
"friends" : ["user2", "user3" ],
"password" : "$2a$10$9iJWLZjBSu3rq19wh7KTduNXIVcXozsNVjwVogO9eoz0uXO52Z2NC"
}
我认为这个模型足够好。但是当有人接受好友请求时,我必须更新两个用户的文档,并且操作不是原子的。在某些情况下,两者中只有一个得到更新。这不是关键数据,但有一个解决方案仍然会很好。这是我想太多了吗?我在 2 阶段提交http://cookbook.mongodb.org/patterns/perform-two-phase-commits/上找到了这个文档,但对于这种情况来说似乎太多了,尽管它很容易实现。