【发布时间】:2018-06-23 05:49:06
【问题描述】:
我正在使用在 MongoDB 上运行的 Parse Server。
假设我有集合 User 和 Comment 以及用户和评论的连接表。
用户可以点赞评论,这会在连接表中创建一条新记录。
特别是在 Parse Server 中,可以使用集合中的“关系”字段来定义连接表。
现在,当我想检索所有 cmets 时,我还需要知道它们中的每一个是否都被当前用户喜欢。如何在不进行额外查询的情况下做到这一点?
您可能会说我可以在Comment 表中创建一个数组字段likers 并使用$elemMatch,但这似乎不是一个好主意,因为可能会有成千上万的评论点赞。
我的想法,但我希望有更好的解决方案:
我可以在Comment 表中创建一个数组字段someLikers、一个关系(连接表)字段allLikers 和一个数字字段likesCount。然后将前 100 个喜欢的人放在 someLikers 和 allLikers 中,其他喜欢的人只放在 allLikers 中。我总是会增加likesCount。
然后在查询 cmets 列表时,我将使用$elemMatch 实现调用,这将告诉我当前用户是否在someLikers 内。当我得到 cmets 时,我会检查一些 cmets 是否有 likesCount > 100 和 $elemMatch 返回 null。如果是这样,我将不得不在连接表中运行另一个查询,查找这些 cmets 并检查(查询)它们是否被当前用户喜欢。
有更好的选择吗?
谢谢!
【问题讨论】:
-
你不需要创建连接表,你需要关系和动态创建统计等
-
看起来您正在使用 MongoDB 的 API ($elemMatch) 来查询您的数据...您有什么理由不使用 Parse 查询吗?
-
@dr_barto 因为我需要知道,在 Find 查询中,用户是否在 likers 数组中,而不选择整个数组。 Parse 似乎不支持这一点,但我还没有尝试使用 Mongo API 来实现它,这只是一个想法。 “$elemMatch 运算符将查询结果中的
字段的内容限制为仅包含与 $elemMatch 条件匹配的第一个元素。” docs.mongodb.com/manual/reference/operator/projection/elemMatch -
你是否在后端使用 PHP 运行查询($elemMatch 看起来像那样)?
-
你为什么要拉 所有 cmets ?我想你会想要实现某种分页/限制,不是吗?无论您使用什么解决方案,一次拉出所有 cmets 的想法都不会很好地扩展。你能解释一下需要你拉取用户喜欢的所有 cmets 的用例吗?
标签: database mongodb parse-platform mongodb-query parse-server