MongoDB优化技术,为帖子存储“喜欢”

时间:2016-10-19 16:00:08

标签: php mongodb

我是MongoDB的新手。 我正在尝试用PHP开发一个简单的练习项目。

我有两个集合如下:

users 集合

用户集合中的文档示例:

{
   "_id": ObjectId("57f099cf1ccbdd780b000029"),
   "first_name": "Foo",
   "last_name": "Bar",
   "username": "foobar",
   "email": "foobar@gmail.com",
   "password": "$2y$10$5ec2yYQ8Xl1HH3zM6205LupR7hf/xOLLW9vU7VMYiUc317HB6p76e"
}

posts 集合

帖子集合中的文档示例:

{
   "_id": ObjectId("57ef7be11ccbdd4c17000029"),
   "uid": ObjectId("57e6ff571ccbdd6016000029"),
   "content": "Data of the post goes here!",
   "time": NumberInt(1475312609),
   "likes": [],
   "comments": [] 
}

likes键将用户ID保存为数组。

我面临的问题是,如果用户已经喜欢帖子,我想显示不同的按钮。在这种情况下,我必须检查当前用户的用户ID(存储在会话中)是否在likes数组中。

现在,我正在获取整个likes数组并检查PHP中的用户ID。

我在想,这个问题的最佳解决方案是什么。

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

您可以管理帖子集合上的计数器。 减少时间复杂度解决方案的最佳方法是创建不同的集合。 并将帖子ID用作密钥,用户ID用作值。

然后你可以执行这个操作:

db.likes.find({"post_id": "user_id"})

这将为您提供特定用户ID和帖子ID组合的结果。

注意:此方法在时间复杂度方面很好,但会使用内存,因为它每次都会保存post_id。