我如何决定一个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'); 

希望它可以帮助你。