Latest web development tutorials

MongoDBの重合

MongoDBは(などの統計平均、合計、として)は、主にデータを処理するための(集計)を重合し、算出したデータの結果を返します。 多少類似したSQL文の数(*)。


集計()メソッド

MongoDBの重合法は、集計を使用しています()。

文法

次のように基本的な構文の集計()メソッドは、次のとおりです。

>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

次のようにデータ収集は、次のとおりです。

{
   _id: ObjectId(7df78ad8902c)
   title: 'MongoDB Overview', 
   description: 'MongoDB is no sql database',
   by_user: 'w3cschool.cc',
   url: 'http://www.w3cschool.cc',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 100
},
{
   _id: ObjectId(7df78ad8902d)
   title: 'NoSQL Overview', 
   description: 'No sql database is very fast',
   by_user: 'w3cschool.cc',
   url: 'http://www.w3cschool.cc',
   tags: ['mongodb', 'database', 'NoSQL'],
   likes: 10
},
{
   _id: ObjectId(7df78ad8902e)
   title: 'Neo4j Overview', 
   description: 'Neo4j is no sql database',
   by_user: 'Neo4j',
   url: 'http://www.neo4j.com',
   tags: ['neo4j', 'database', 'NoSQL'],
   likes: 750
},

今、私たちは次のように計算)上記の集計を(使用しての著者によって書かれた記事の数毎に算出されたを設定します。

> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])
{
   "result" : [
      {
         "_id" : "w3cschool.cc",
         "num_tutorial" : 2
      },
      {
         "_id" : "Neo4j",
         "num_tutorial" : 1
      }
   ],
   "ok" : 1
}
>

SQL ステートメント上記と同様の例:by_user選択するには、(*)カウント by_userによってmycolグループから

上記の例では、グループへのフィールドで、データをフィールドby_userフィールドby_user同じ値の和を計算します。

次の表は、いくつかの集計式を示しています。

表現 説明
$合計 合計を計算します。 db.mycol.aggregate([{$グループ:{_id: "$のby_user」、num_tutorial:{$和:" $が好き "}}}])
$平均 平均を計算します db.mycol.aggregate([{$グループ:{_id: "$のby_user」、num_tutorial:{$の平均:" $が好き "}}}])
$ミン すべてのドキュメントのコレクションは価値が最小に対応して取得します。 db.mycol.aggregate([{$グループ:{_id: "$のby_user」、num_tutorial:{$分:" $が好き "}}}])
$マックス 最大の価値に相当するすべての文書のコレクションを取得します。 db.mycol.aggregate([{$グループ:{_id: "$のby_user」、num_tutorial:{$最大:" $が好き "}}}])
$プッシュ 結果の文書では、配列に値を挿入します。 db.mycol.aggregate([{$グループ:{_id: "$のby_user」、URL:{$プッシュ:" $のURL "}}}])
$ AddToSet 結果の文書では、配列に値を挿入するのではなく、コピーを作成しません。 db.mycol.aggregate([{$グループ:{_id: "$のby_user」、URL:{$ addToSet:" $のURL "}}}])
$ファースト ソートリソース文書によると、最初の文書データです。 db.mycol.aggregate([{$グループ:{_id: "$のby_user」、first_url:{$最初:" $のURL "}}}])
$ラスト ソートリソース文書によると、最後の文書データを取得します。 db.mycol.aggregate([{$グループ:{_id: "$のby_user」、last_url:{$最後:" $のURL "}}}])

パイプラインの概念

一般的に、UnixおよびLinuxでのパイプは、次のコマンドのパラメータとして現在のコマンドの出力に使用されます。

次のパイプライン処理に処理結果後の配管内のMongoDB MongoDBのドキュメント高分子パイプ。 パイプライン動作を繰り返すことができます。

式:入力および出力ドキュメントを処理します。 式は、ステートレスでのみ集約文書の現在のパイプラインを計算するために使用することができ、あなたが他の文書に対処することはできません。

ここでは、一般的にいくつかの操作で使用する集約フレームワークを導入します:

  • $プロジェクト:入力文書の構造を変更します。 フィールドを、名前の変更を追加または削除するために使用することができ、また、ネストされた計算や文書を作成するために使用することができます。
  • $試合:データ、資格のある文書の出力のみをフィルタリングするために使用されます。 MongoDBの標準クエリ演算子を使用して$マッチ。
  • $制限:MongoDBの重合パイプラインが返されたドキュメントの数を制限します。
  • $スキップ:重合パイプラインでドキュメントの指定された数をスキップして、ドキュメントの残りの部分を返します。
  • $アンワインド:ドキュメントが複数にタイプフィールドの配列に分割され、値を含む各配列。
  • $グループ:グループ文書の集合は、統計結果を得るために使用することができます。
  • $並び替え:発注後の入力文書出力。
  • $ GeoNear:地理的な位置に近い順序文書出力。

パイプライン演算子の例

1、$プロジェクト例

db.article.aggregate(
    { $project : {
        title : 1 ,
        author : 1 ,
    }}
 );

それができるならば順序は_idが含まれていない場合この場合、結果はそこだけ_id、tilteと著者3つのフィールドは、デフォルトの_idフィールドは、含まれるようにするだろう。

db.article.aggregate(
    { $project : {
        _id : 0 ,
        title : 1 ,
        author : 1
    }});

2. $マッチ例

db.articles.aggregate( [
                        { $match : { score : { $gt : 70, $lte : 90 } } },
                        { $group: { _id: null, count: { $sum: 1 } } }
                       ] );

$一致が70より大きいスコアを得るために使用される以下90のレコードに等しく、次に一致するレコード処理のパイプラインオペレータ$グループの次の段階へ。

3. $インスタンスをスキップ

db.article.aggregate(
    { $skip : 5 });

$スキップ処理パイプライン演算子の後、最初の5つの文書が出て、「フィルタリング」されています。