哦 知道了,谢谢 ghost

谢谢,这个方法前期是可以的
不过还有个疑问,一个 明星的动态列表 往往每个动态都是几百个点赞 甚至几千个点赞
这种情况 请问是怎么实现的?

Like 表用于在 Post 详情页(分页、排序地)显示点赞列表。

Post 的 likedUsers 与 likedUsersNumber 数据是冗余的,用于在 Post 列表页显示数据,这部分数据不需要完整,比如 likedUsers 只需要保存最近的 20 个就够了。

此外,还可以使用我们的 LeanCache redis 服务,来保存 Post 完整的 likedUsers 数据。

按照目前的方案数据存储两个地方
like表数据用来显示
array数据用来判断 一个列表 当前用户是否点赞 便利循环array里面是否存在当前用户id
这样的便利数据在 明星列表中的动态就不行了吧,因为每个动态的array 数据是巨大的

显示没有问题,现在的疑问就一个...

就在 array数据巨大的时候 ,一个列表中如何判断 哪些动态点赞哪些没点赞

判断 一个列表 当前用户是否点赞

这个需求可以构建一个 Like 查询,user == currentUser && post in postList。

如果索引合适,这个查询成本不高。

这样还是一个列表每一条数据都请求API了哦

这样一个列表只有一次查询,user == currentUser && post in postList 这个查询的结果是一个列表。

使用CQL是吧? 这个功能我还没用过, 好的, 我去试试。 谢谢

不需要用到 CQL,是可以有 in 查询的,拿 js sdk 举例:

new AV.Query('Like')
  .equalTo('user', user)
  .containedIn('post', postList)
  .find();
1 人赞了这个帖子.

恩 那太好了

做的时候想到个问题,这样查询得到的是 Like 表里该用户的 postList 对应的数据
那不是直接 where userId 可以得到一样的结果

where userId 会查到所有该用户的点赞记录,可能会很多,事实上你的需求只需要匹配当前列表就够了。

额是的,谢谢

当前列表 我已经实现了 分页 每页 10调数据,但是以 对象 的形式 。 我不知道 这样的查询效率怎么样 。?

containedIn('post', postList) 是对象

Pointer 与其他的数据类型没有区别,记得建好索引。

啊,我对这个不是很了解,索引相关 能不能简单跟我说下。

我所有的查询都没建索引,这个很重要。。。

你是指唯一索引吗?
点赞表不能建立唯一索引吧
用户和动态 在这个表都能重复出现

User 与 Post 联合唯一索引。目前建这种索引需要联系我们申请。