0

さて、私は集約の問題に苦しんでいます。問題を解決する最も簡単な方法は、map reduce を使用するか、別の検索クエリを作成してから、非同期ライブラリのヘルプを使用してループすることだと思いました。

スキーマは次のとおりです。

db.keyword
keyword: String
start: Date
source: String(Only one of these (‘google’,’yahoo’,’bing’,’duckduckgo’) )
job: ref db.job
results: [
    {
            title: String
            url: String
            position: Number
    }
]


db.job
name: String
keywords: [ String ]
urls: [ String ]
sources: [ String(‘google’,’yahoo’,’bing’,’duckduckgo’) ]

今、私はこのフォームにデータを取る必要があります:

data = {
    categories: [ 'keyword1', 'keyword2', 'keyword3' ],
    series: [
        {
            name: 'google',
            data: [33, 43, 22]
        },
        {
            name: 'yahoo',
            data: [12, 5, 3]
        }

    ]
}

最大の問題は、series[0].data 配列が非常に難しい検索で構成されており、db.job.urls を db.keyword.results.url と照合してから位置を取得することです。query_ を単純化する方法はありますか? 私は多くの map reduce の例を見てきましたが、どのデータをマップし、どのデータを減らすかの正しい方法を見つけることができません。

4

1 に答える 1

2

2 つの別々のコレクション (キーワードとジョブ) のデータを結合しようとしているように見えます。

Map Reduce と新しい Aggregation Framework は、一度に 1 つのコレクションに対してのみ操作できます。

おそらく最善の策は、各コレクションを個別にクエリし、結果をプログラムで結合して、アプリケーションに最適な形式で保存することです。

Map Reduce を試してみたい場合は、インクリメンタルな Map Reduce 操作を使用して 2 つのコレクションの値を結合したユーザーによって書かれたブログ投稿へのリンクを次に示します。
http://tebros.com/2011/07/using-mongodb-mapreduce-to-join-2-collections/

Map Reduce を MongoDB で使用する方法の詳細については、Mongo ドキュメントを参照してください: http://www.mongodb.org/display/DOCS/MapReduce (インクリメンタル Map Reduce に関するセクションはこちら: http://www.mongodb.org /display/DOCS/MapReduce#MapReduce-IncrementalMapreduce )

MongoDB クックブックには、いくつかの追加の Map Reduce の例があります: http://cookbook.mongodb.org/

Map Reduce 操作の実行方法の段階的なウォークスルーについては、MongoDB クックブックのレシピ「バージョン付きドキュメントで最大値と最小値を見つける」http://cookbook.mongodb.org/patternsの「Extras」セクションを参照してください。 /finding_max_and_min/

上記が、希望する結果を達成する方法についてのアイデアを提供してくれることを願っています。前述したように、最も簡単な解決策は単純に結果をプログラムで結合することだと思います。ただし、これを行う Map Reduce 操作の記述に成功した場合は、ソリューションを投稿して、コミュニティがあなたの経験から利益を得られるようにしてください。

于 2012-04-26T15:55:10.777 に答える