0

データベースに次のスキーマがあります。

{ 
    id: 12345; 
    friends: [123,345,678,908]
},
{ 
    id: 908; 
    friends: [123,345]
}

コレクション全体からすべての一意の友人 ID の配列を取得する方法はありますか?

4

2 に答える 2

1

異なる友人の値を取得するために、map/reduce ジョブを記述する必要はありません。

とにかく走れ:

> db.collection.distinct("friends")
[ 123, 345, 678, 908 ]
于 2013-04-26T15:13:58.233 に答える
0

私は MongoDB の MapReduce 実装にあまり詳しくありませんが、マッパーに渡された値をキーとして書き出させ、単純に null 値を使用させることができると思います。

このようにして、レデューサーが特定のキー (フレンド ID) を 1 回だけ受け取るようにすることができ、値を繰り返し処理することなく、それを 1 回だけ書き出すことができます。とにかく値がnullなので、反復する意味はありません(反復する場合、キーを複数回書き出すことになることは言うまでもありません。確実に区別するために一度だけ書き出す必要があります。)

ただし、キーはレデューサー出力ファイル全体に分散されることに注意してください。たとえば、レデューサー 1 が出力123し、レデューサー 2 が出力345する可能性があるため、配列を構築するために出力ファイルの内容を後で統合する必要がある場合があります。

于 2013-04-26T14:14:25.323 に答える