User{
'_id' : ObjectId(..),
'Friends': [{_id : ref1},{id : ref2}]
'Posts' : [{'popularity' :103,...}, {'popularity' : 86,...}
}
并且每个引用链接到朋友中的另一个用户 id。从所有用户朋友中获取最受欢迎帖子的最快方法是什么?也许只是前20名。
User{
'_id' : ObjectId(..),
'Friends': [{_id : ref1},{id : ref2}]
'Posts' : [{'popularity' :103,...}, {'popularity' : 86,...}
}
并且每个引用链接到朋友中的另一个用户 id。从所有用户朋友中获取最受欢迎帖子的最快方法是什么?也许只是前20名。
MongoDB 允许灵活的模式设计来弥补没有连接的问题。所以我假设在这个模式中关系是“双向的”(即,如果我是你的朋友,那么你在我的朋友数组中,而我在你的朋友数组中?)
在这种情况下,您可以执行以下聚合查询:
db.users.aggregate([
{$match : { "Friends._id": <my _id> } },
{$unwind : "$Posts" },
{$sort : { "Posts.popularity" : -1 },
{$limit : 20 }
] )
基本上,过滤所有在他们的朋友数组中有我的用户,展开他们的帖子数组,排序以首先获得最受欢迎的帖子并限制在前 20 位。
如果您没有关于“Friends._id”的索引,这将不是一个快速查询。