sql >> データベース >  >> NoSQL >> MongoDB

MongoDBとの関連性による並べ替え

    MapReduceとそれをクライアント側で実行するのは遅すぎるでしょう-集約フレームワークを使用する必要があります(MongoDB 2.2の新機能)。

    次のようになります:

    db.collection.aggregate([
       { $match : { "tags": { "$in": ["bar", "hello"] } } },
       { $unwind : "$tags" },
       { $match : { "tags": { "$in": ["bar", "hello"] } } },
       { $group : { _id: "$title", numRelTags: { $sum:1 } } },
       { $sort : { numRelTags : -1 } }
       //  optionally
       , { $limit : 10 }
    ])
    

    1番目と3番目のパイプラインメンバーは同じように見えることに注意してください。これは意図的であり、必要です。手順は次のとおりです。

    1. タグ「bar」または「hello」が含まれているドキュメントのみを渡します。
    2. タグ配列を巻き戻します(タグ要素ごとに1つのドキュメントに分割することを意味します
    3. 「bar」または「hello」のタグのみを渡す(つまり、残りのタグを破棄する)
    4. タイトルでグループ化(「$ _ id」または元のドキュメントのその他の組み合わせで、(「bar」と「hello」の)タグの数を合計することもできます
    5. 関連するタグの数で降順​​で並べ替えます
    6. (オプションで)返されるセットをトップ10に制限します。


    1. マングースでSlaveOkを実行する方法は?

    2. MongoDBは、またはクエリを使用して複数のサブドキュメントを更新します

    3. HadoopMapReduceジョブ実行フローチャート

    4. Meteor1.0アプリをherokuにデプロイした後のアプリケーションエラー