假设用户为文章点赞,点赞操作是可以取消的。
用户和文章应该是多对多的关系,我看了一下 mongodb 官网上面的 一对多的实例,像它这样在 多 的一方添加 一 的 id,应该是比较适合那种建立了就不会轻易发生改变的关系。但像点赞这种经常发生改变的操作似乎就不太适用这种形式了。
后来我想了两个方案。
第一种是在 用户文档 中添加一个 like
的数组,每点赞一次就给把 文章id push 到 like
里面,每次删除就直接删除数组里面的 文章id 。
// User
{
username: 'test',
like: [123, 234, 345, 456, 567, 678, 789,890] // 文章id
}
第二种就是用传统的 RDB 的方法,新建一个 Like
的 collection,里面存的是 用户id 和 文章id 。
// Like
{
user_id: 111,
post_id: 123
}
由于没有实践经验,所以特地来请教一下。顺便问下还有没有其他更好的方式?
A third solution is proposed here, which is to store an array of _ids of users who liked the article in the posts collection, for example:
Check the users who liked an article:
Check the number of likes for an article:
Check articles with 100 likes:
Check articles liked by user:
user liked the post:
user unlikes the post:
PS: The above code has not been tested, please refer to the documentation for testing.
The latter option is recommended, because you should also count the number of likes for each article.