如何在这种情况下在MongoDB中分组

时间:2011-12-20 15:38:07

标签: mongodb mongoid

假设我们有posts这样的表

id   |   friend_id   |  title  |
- -  |  - - - - - -  | - - - - |
 1   |      2        | John    |
 2   |      5        | John    |
 3   |      4        | John    |
 4   |      4        | Joe     |
 5   |      5        | Amy     |
 6   |      2        | Amy     |
 7   |      2        | Joe     |

我想要一个查询,它将按title对行进行分组,并返回一行,其中包含一个friend_id数组。

结果可能是这样的:

{
  John: { id: 1, title: John, friend_id: [2,5,4] }
  Joe: { id: 4, title: Joe, friend_id: [4,2] }
  Amy: { id: 5, title: Amy, friend_id: [5,2] }
}

我知道上面的例子不是真的!只是为了理解。

2 个答案:

答案 0 :(得分:1)

此查询

db.posts.group(
   key: {title: true}
   , initial: {friend_ids : []}
   , reduce: function(doc, out){ out.push(doc.friend_id) }
   } );

将返回

之类的结果
{
 [{title : "John", friend_ids : [2,5,4]} , ....]
}

答案 1 :(得分:0)

您可以使用map reduce使用mongodb执行此操作pivotingThe MongoDB Cookbook中有一个很好的例子。请看一下。它不是那么难,你可以自己做。