1

そのため、効率的なmongoクエリを見つけようとして立ち往生している興味深いユースケースがあります。

まず、12,000 のカテゴリと 100,000 の投稿があります。ランダムなカテゴリから 100 組の投稿をランダムに選択する必要があります。ペアはカテゴリからランダムに選択されますが、各ペアには両方の投稿が同じカテゴリに属している必要があります。

ユーザーは各ペアを見て評価し、100 件を見終わったら、別の 100 件のランダムな投稿を取得します (できれば、既に見た同じペアではないことをお勧めします)。

したがって、要件は次のとおりです。

  • ランダムなカテゴリ セットからランダムに 100 組の投稿を取得する

オプションの要件:

  • 彼らがすでに評価したのと同じペアを返さない

モンゴ コレクション

  • ユーザー
  • カテゴリー
  • 投稿
    • カテゴリ ID
    • 評価 (投稿に埋め込まれたコレクション)

Mongoでこれを行うにはどうすればよいですか...簡単であれば、このデータの一部をmongoから別のデータベースに移動する必要がありますか?

4

2 に答える 2

0

はい。非常に興味深い質問です。私の提案はrandomVal、投稿文書にフィールドを配置することです。次に、並べ替えることができます{CategoryId: 1, randomVal: 1}。結果は、すべての投稿をCategoryIdそのグループ内でランダムにグループ化するカーソルになります。これを概念的に配列と考えると、インデックスが付けられた偶数の投稿をすべて選択し、それらを奇数の隣接投稿とペアにして、カテゴリ内の一意のランダム ペアを取得できます。

このリストからランダムなペアを選択する方法にはいくつかの実験が必要だと思いますが、私の直感では、別のrandomVal2. ユーザー向けクエリは、このペア コレクションを一度に 100 ずつ増やします。

于 2013-01-23T17:45:38.590 に答える
0

2つのクエリでこれを達成できると思います。まず、集約フレームワークを使用して、Posts コレクションに対してマップ削減操作を行う必要があります。マップ フェーズでは、カテゴリ ID をキーとして使用し、投稿 ID をレデューサーに発行します。

reduce フェーズでは、各カテゴリから 2 つのランダム ID を選択します。map reduce の最後に、PostID のリストが表示されます。Posts次に、コレクションからそれらの投稿を取得します。

ratedByドキュメントにフィールドを追加し、Postユーザーが投稿を評価したときに、自分の userName をratedBy フィールドに追加します。次に、最初にそのフィールドを map reduce コマンドのフィルターとして使用して、既に評価されているドキュメントをユーザーに提供しないようにします。

幸運を

于 2013-01-23T14:31:08.687 に答える