MongoDB 集約関数の説明

MongoDB 集約関数の説明

  • オーケストレーション
6分で読めます 更新日 Oct 31, 2017

ポイント: MongoDB 集約関数は、SQL に類似した複雑なデータ分析を可能にし、カウントや合計などの必須機能を網羅しています。チュートリアルでは、これらの関数を例を通じて説明し、WordCount プログラムや MapReduce 技術を含んでいます。

  • 集約関数は count, sum, average, min, max で構成されています。
  • 例として、データ分析のための WordCount や distinct 操作が含まれます。

これは、NodeJS と MongoDB の使用方法に関するチュートリアルの第二部です。ここでは、集約関数の学習を簡単にするために、通常の MongoDB シェルとコマンドを使用します。

集約関数の使用方法を示すために、まず基本的なクエリの方法を説明します。次に、最初に学ぶときに人々が始めるWordCountプログラムの作成方法を示します。例えば、Apache Sparkのように。

基本的に、集約関数は2つあります: aggregate と MapReduce。集約関数は、馴染みのある SQL コマンドと同じです:

MapReduce

    SQL select xxx, count (xxx) from table group by xxx

集約関数は count, sum, average, min, max, などです。

最初の部分で使用したデータは、喫煙者調査の日付です。複雑な構造を持っています。スキーマは次のようになります:

    var schema = new mongoose.Schema({
cachedContents : {
largest : String,
non_nill : Number,
nill : Number,
tip : [{
item : String,
count: Number
}] ,
smallest : String,
format : {
displayStyle : String,
align : String
}
}
});

サンプルデータは次のようになります:

    "_id" : ObjectId("59e9a6144bde260fa07e68f1"),
"cachedContents" : {
"nill" : 0,
"non_nill" : 14069,
"largest" : "WY",
"tip" : [
{
"item" : "NC",
"count" : 20,
"_id" : ObjectId("59e9a6144bde260fa07e6905")
},
{
"item" : "ND",
"count" : 19,
"_id" : ObjectId("59e9a6144bde260fa07e6904")
},
{
"item" : "OH",
"count" : 18,
"_id" : ObjectId("59e9a6144bde260fa07e6903")
},
…. (shortened)…..
{
"item" : "WY",
"count" : 2,
"_id" : ObjectId("59e9a6144bde260fa07e68f3")
},
{
"item" : "IN",
"count" : 1,
"_id" : ObjectId("59e9a6144bde260fa07e68f2")
}
]
},
"__v" : 0
}

埋め込まれたドキュメントの配列があるため、扱いが複雑です: tip:[{item, count}]。したがって、まずこのデータをクエリする方法を示し、次に集約およびマップリデュース関数を示すために簡単なデータを作成します。

簡単なクエリ

簡単な find クエリはすべてのフィールドを出力します。次のように:

    db.smokersmodels.find({ "cachedContents.largest" : "2016" }).pretty()
    "_id" : ObjectId("59e9a6144bde260fa07e6fda"),
"cachedContents" : {
"nill" : 0,
"non_nill" : 14069,
"largest" : "2016",
"tip" : [
{
"item" : "2014-2015",
"count" : 20,
"_id" : ObjectId("59e9a6144bde260fa07e6fe5")
},
… (and so forth) ….

出力を JSON 形式で読みやすくするためにpretty()を使用することに注意してください。

フィールド名の周りに引用符を付けることに注意してください。MongoDB からの指示を見ると、それらを省略しています。しかし、それを省略すると mongo シェルを使用したときに構文エラーが発生します。stackoverflow を見ると、その点について混乱があるようです。私たちは MongoDB バージョン mongodb-linux-x86_64-debian81-3.4.9 を使用しています。

また、cachedContents.largestのようにドット表記を使用して、ドキュメント内にネストされたフィールドを取得します。

特定のフィールドを出力するには、それらをクエリの後に置き、印刷するものを示すために数字の 1 を付けます。ここで、pretty()を省略した場合の出力がどのように見えるかに注意してください。

    db.smokersmodels.find({ "cachedContents.largest" : "2016" } , { "cachedContents.largest" : 1 })
    { "_id" : ObjectId("59e9a6144bde260fa07e688c"), "cachedContents" : { "largest" : "2016" } }
{ "_id" : ObjectId("59e9a6144bde260fa07e68ad"), "cachedContents" : { "largest" : "2016" } }
{ "_id" : ObjectId("59e9a6144bde260fa07e68e5"), "cachedContents" : { "largest" : "2016" } }
{ "_id" : ObjectId("59e9a6144bde260fa07e693d"), "cachedContents" : { "largest" : "2016" } }
{ "_id" : ObjectId("59e9a6144bde260fa07e69c3"), "cachedContents" : { "largest" : "2016" } }

簡単な集約

簡単な集約を行うためにdistinct操作を使用します:

    db.smokersmodels.distinct("cachedContents.largest")
[
"2016",
"WY",
"Wyoming",
"Tobacco Use – Survey Data",
"Cigarette Use (Adults)",
"Smoking Status",
"BRFSS",
"Some Days",
"%",
"Percentage",
"87.9",
"*",
"Data in these cells have been suppressed because of a small sample size",
"14.9",
"85.4",
"90.4",
"39839",
"Overall",
"White",
"All Ages",
"All Grades",
"BEH",
"101BEH"
]

ワードカウント

次に、MongoDB での WordCount プログラムを示すために、いくつかの簡単なデータを作成します。

まず、いくつかのデータを作成します:

    db.words.insertMany( [
{ word: "the" },
{ word: "rain" },
{ word: "in" },
{ word: "spain" },
{ word: "spain" }
]);

それを印刷して、どのように見えるかを確認します:

    db.words.find().pretty()
{ "_id" : ObjectId("59eb051e878eb4d6aca74243"), "word" : "the" }
{ "_id" : ObjectId("59eb051e878eb4d6aca74244"), "word" : "rain" }
{ "_id" : ObjectId("59eb051e878eb4d6aca74245"), "word" : "in" }
{ "_id" : ObjectId("59eb051e878eb4d6aca74246"), "word" : "spain" }
{ "_id" : ObjectId("59eb051e878eb4d6aca74247"), "word" : "spain" }

WordCount プログラムのトリックは、(key,value) ペア (word, 1) を作成し、次に数字の 1 を合計することです:

    db.words.aggregate([ {$group: { _id: "$word", cnt: {$sum: 1} } } ])
    { "_id" : "in", "cnt" : 1 }
{ "_id" : "rain", "cnt" : 1 }
{ "_id" : "spain", "cnt" : 2 }
{ "_id" : "the", "cnt" : 1 }

ご覧の通り、単語spainは2回出現します。

mapReduce を使用することで、基本的に同じことを行います。最初にemit 関数を使用して (key,value) ペア (word, 1) を作成します。次に、JavaScript のArray.sum関数を使用して数字の 1 を合計します。

    db.words.mapReduce(
function() { emit(this.word,1); },
    function(key, values) {return Array.sum(values)}, {
query:{},
    } out:"total_matches"
).find()
    { "_id" : "in", "value" : 1 }
{ "_id" : "rain", "value" : 1 }
{ "_id" : "spain", "value" : 2 }
{ "_id" : "the", "value" : 1 }

結果は同じです。

追加リソース

play

MongoDB ガイド

  1. MongoDB 概要: MongoDB の始め方
  2. Ubuntu と Mac に MongoDB をインストールする方法
  3. MongoDB でデータベースを作成する
  4. MongoDB シェル基本コマンド
  5. MongoDB Compass: Mongo GUI の使用
  6. MongoDB ロールベースアクセス制御 (RBAC) の説明
  7. MongoDB プロジェクション & プロジェクションオペレーターの説明
  8. MongoDB 集約関数の説明
  9. MongoDB ソート: sort() メソッド & 例
  10. MongoDB でプッシュ & プルオペレーターを使用する
  11. MongoDB $unwind の使用方法
  12. 23 の一般的な MongoDB クエリオペレーターとその使用方法
  13. MongoDB 地理位置情報クエリの例
  14. MongoDB トランザクションの紹介
  15. MongoDB インデックス: 主要なインデックスタイプとその管理方法
  16. 知っておくべき主要な MongoDB コマンド
  17. MongoDB 複製: 完全な紹介
  18. MongoDB クラスターをセットアップする方法
  19. MongoDB シャーディング: 概念、例 & チュートリアル
  20. MongoDB Atlas: 管理された MongoDB の設定と使用
  21. MongoDB を Docker コンテナとして実行する方法
  22. MongoDB メモリ使用量、管理 & 要件
  23. MongoDB バックアップ用の mongodump の使用方法
  24. MongoDB バックアップの復元のための mongorestore の例
  25. PyMongo の使用方法
  26. MongoDB と NodeJS のための Mongoose の使用方法
  27. MongoDB チートシート
  28. MongoDB 対 Cassandra: NoSQL データベースの比較
  29. PostgreSQL 対 MongoDB: データベースの比較
  30. MySQL 対 MongoDB: データベースの比較
  31. MongoDB 認定: 入門

これらの投稿は私自身のものであり、必ずしもBMCの立場、戦略、または意見を表すものではありません。

オーケストレーションの関連記事

The Briefを購読する

このオファーに登録することで、あなたはBMCのプライバシーポリシーを読み、同意したことを確認します。

ありがとう

あなたはThe Briefに登録されました
The Briefはメインフレームとエンタープライズオーケストレーション—BMC AMIとControl-M—および、両者に関するアナリストの研究、顧客の展開、イベントをカバーしています。