如何汇总mongodb中引用的数据?

时间:2013-02-27 22:45:56

标签: mongodb sorting mapreduce aggregation-framework nosql

User{
      '_id' : ObjectId(..),
      'Friends': [{_id : ref1},{id : ref2}]
      'Posts' : [{'popularity' :103,...}, {'popularity' : 86,...}
}

每个引用链接到其他用户ID在Friends中。 从所有用户朋友那里获取最受欢迎帖子的最快方法是什么? 也许只是前20名。

1 个答案:

答案 0 :(得分:0)

MongoDB允许灵活的架构设计来弥补没有连接。所以我假设在这个模式中关系是“双向的”(即如果我是你的朋友,那么你在我的朋友阵列中,我在你的朋友阵列中?)

在这种情况下,您可以执行以下聚合查询:

db.users.aggregate([
    {$match : { "Friends._id": <my _id> } },
    {$unwind : "$Posts" },
    {$sort :  { "Posts.popularity" : -1 },
    {$limit : 20 }
] )

基本上,过滤所有让我在他们的朋友阵列中的用户,展开他们的帖子数组,排序以获得最受欢迎的帖子,并限制在前20名。

如果您没有“Friends._id”的索引,这将不是一个快速查询。