0

我们在 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
}

这可能吗?我正在努力寻找有关它的任何文档。我们真的希望查找的结果首先按“starred_by”字段排序,这样加星标的结果首先出现,然后按创建日期排序。

谢谢

4

1 回答 1

1

我建议您将它们放入单独的集合中

{ item : ObjectID, user: ObjectID, starred_on : Date }

原因是一个项目可能会被很多用户加注星标,并且您的项目文档可能会超出文档限制大小 ( 16MB )。

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

db.starred.find({ user : session.user_id, }).sort([starred_on, -1])
于 2012-12-10T10:54:23.680 回答