我如何决定一个post是否被一个Mongoose用户喜欢?
我试图做一个function,使用户可以喜欢的职位(无论是用户喜欢的职位,或不喜欢的用户,即不厌恶或投票)。
我的post是具有模式的MongoDB集合中的对象
{ title: String, text: String }
而我的用户有架构
{ username: String, password: String }
我可以,例如,创build一个数组的post与用户的ID喜欢特定的职位的ID。 它看起来像
{ title: String, text: String, likedByUsers: [ObjectID] }
或者我可以在用户创build一个数组的用户喜欢的post的ID,这将是类似的东西
{ username: String, password: String, postsLiked: [ObjectID] }
不过,我预计用户会喜欢上千个post,所以我可能会面临MongoDB中对象大小的限制。
所以我想我应该创造一个新的喜欢collections
{ userId: ObjectID, postId: ObjectID }
但是,我想我应该如何检索它在我的应用程序。
我是否应该存储用户(已login)喜欢的所有post的ID数组,并且在打印每篇post时,我会查看post是否在用户喜欢的post中,然后显示“已经喜欢”button?
或者,我可以在请求查看所有post时发送用户ID,然后为每个post添加一个字段“isLiked”,表示是否可以查找Liked集合中的某个对象,从而匹配post和用户ID?
MongoDB中文档的限制是16MB,非常巨大。 除非你想创build下一个Facebook,否则将ID放在数组中不会是一个问题。 我在单个文档数组中有10k + ID的生产工作stream程,没有问题。 这个问题不应该是关于文档大小,你必须根据你需要的查询来select放在哪里。
我会为邮政创build一个模式,并把喜欢的ID放在那里,比如:
{ title: { type: String }, text: { type: String }, likes: [{ type: ObjectId, ref: 'users' }] }
post会变老,人们会停止喜欢它,所以如果放在Post而不是User集合中,数组的中等大小应该更简单。 另外,放置ref
属性使您能够使用Mongoose Populate API,因此您可以查询post,例如:
Posts.find().populate('likes');
这将使您获得arrays中的完整用户信息。 要search单个用户喜欢的post,也很简单:
Posts.find({likes: userId}).populate('likes');
希望它可以帮助你。