Javascript 跟踪';星号';MongoDB共享集合中每个用户的项目数

Javascript 跟踪';星号';MongoDB共享集合中每个用户的项目数,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我们在MongoDB中收集了一组用户提交的帖子,其他用户可以对这些帖子进行“加星”。我想知道实现这一目标的最佳方式是什么 我的第一个猜测是将一组用户id放在一篇文章上,就像这样: { created:Date title:String content:String ... starred_by:[ObjectId] // Array of users by id that have starred the post } 然后,当我们执行find()时,我想通过以下

我们在MongoDB中收集了一组用户提交的帖子,其他用户可以对这些帖子进行“加星”。我想知道实现这一目标的最佳方式是什么

我的第一个猜测是将一组用户id放在一篇文章上,就像这样:

{
   created:Date
   title:String
   content:String
   ...
   starred_by:[ObjectId] // Array of users by id that have starred the post
}
然后,当我们执行find()时,我想通过以下方式订购:

$sort: {
   starred_by:{$in:[session.user_id]},
   created:-1
}
这可能吗?我正努力在上面找到任何文档。我们确实希望find的结果首先按“starred_by”字段排序,这样星号结果排在第一位,然后再按创建日期排序


谢谢

我建议你把它们单独收藏起来

{ item : ObjectID, user: ObjectID, starred_on : Date }
原因是一个项目可能会被很多用户标记,并且您的项目文档可能会超出文档大小限制()

我不完全确定你的查询是什么(显示某个用户的最新文章?)。如果您想显示由给定用户(mongodb shell)加星号的最新项目:

db.starred.find({ user : session.user_id, }).sort([starred_on, -1])