2011-12-20 10 views
0

レッツは、私はそのtitleによってグループが行うとfriend_idの配列を使用して1行を返すクエリをしたい、我々はこのどのようにMongoDBでグループ別に、この場合で

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  | 

ようpostsテーブルを持っていると言います。

結果はそのようなSTHのようになります。

{ 
    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] } 
} 

私は上記の例では、実際のものではありません知っています!ちょうど意味をなさないように。

答えて

0

map reduceを使用してpivotingをmongodbとすることができます。 The MongoDB Cookbookには良い例があります。見てください。それほど難しいことではなく、あなた自身でそれをすることができます。

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]} , ....] 
} 
+0

のような結果を返します私は、それはルビー 'Post.collection.group({キーで作業を取得しようとしたものです:[ "タイトル"] 'Mongo :: OperationFailure:データベースコマンド 'group' failed:エラー:' Mongo :: OperationFailure:データベースコマンド 'group' failed: (errmsg: '例外:reduce invoke failed:JSエラー:TypeError:out.pushは関数の設定を減らす関数ではありません'; code: '9010'; ok: '0.0') ' – amrnt

+0

reduce func 'function(doc、out){out.friend_ids.push(doc.friend_id)}' 'friend_ids'は元の回答にはありませんでした。 少量のデータに対しては正常に動作することに注意してください。 –

関連する問題