Docs Menu
Docs Home
/
Atlas Charts
/ /

バックアップ集計パイプライン

項目一覧

  • エンコーディング
  • クエリの追加
  • 計算フィールドの追加
  • フィルターの追加

チャートのレンダリングに必要なデータを取得するために、Charts は MongoDB Aggregation Pipeline を作成し、MongoDB database サーバー上でパイプラインを実行します。 パイプラインは複数のステージで構成されており、各ステージはチャートの作成者によって指定された異なる 設定 に基づいて生成されます。

このドキュメントでは、さまざまなチャートビルダの設定が集計パイプラインの構築にどのように使用されるかについて説明しています。 チャートの作成に使用されるパイプラインは、右上の省略記号ドロップダウンで View Aggregation Pipelineオプションを選択することで表示できます。

Atlas Charts では、次の順序で下記のセグメントで構成されるパイプラインが構築されます。

  1. Charts ビュー

  2. 埋め込みチャートの事前フィルター

  3. ダッシュボード フィルター

  4. チャートクエリ

  5. ルックアップ フィールド

  6. 計算フィールド

  7. 埋め込みフィルター(インジェクションフィルターを含む)

  8. チャート フィルター

  9. エンコードされたフィールド

  10. ソート

  11. ドキュメント数の上限

注意

チャートを作成するときは、前のチャート セグメントのすべてではなく、一部を構成できます。 Charts が集計パイプラインを生成するとき、指定されていないセグメントはスキップします。

次のチャートは、事務用品会社の合計売上額を購入方法別に分類したものです。 データコレクション内の各ドキュメントは 1 つの販売を表します。

このチャートを例として、上記の各設定の仕様によって、Atlas Charts によって生成される集計パイプラインがどのように変更されるかを調べます。

フィルターのない集計パイプラインの例。
クリックして拡大します

Data Sourceパイプライン、 Queryバー クエリ、計算フィールド、フィルターがFilterペインに追加されていない場合、Atlas Charts は次の集計パイプラインを生成します。

1{
2 "$addFields": { // Encoding
3 "__alias_0": {
4 "$sum": "$items.price"
5 }
6 }
7},
8{
9 "$group": {
10 "_id": {
11 "__alias_1": "$purchaseMethod"
12 },
13 "__alias_0": {
14 "$sum": "$__alias_0"
15 }
16 }
17},
18{
19 "$project": {
20 "_id": 0,
21 "__alias_1": "$_id.__alias_1",
22 "__alias_0": 1
23 }
24},
25{
26 "$project": {
27 "x": "$__alias_1",
28 "y": "$__alias_0",
29 "_id": 0
30 }
31},
32
33{
34 "$addFields": { // Sorting
35 "__agg_sum": {
36 "$sum": [
37 "$y"
38 ]
39 }
40 }
41},
42{
43 "$sort": {
44 "__agg_sum": -1
45 }
46},
47{
48 "$project": {
49 "__agg_sum": 0
50 }
51},
52{
53 "$limit": 5000
54}

この時点でのパイプラインは、 Encodeパネル、デフォルトのソート順序のステージ、および Atlas Charts によって 5000 に設定されている最大ドキュメント数で構成されています。

以下のクエリでは、表示されるドキュメントを、 saleDateJanuary 1, 2017以降と等しく、 items配列に 5 つ以上の要素があるドキュメントのみに制限します。 itemsは、各要素が販売中に購入された商品である配列です。

クエリ:

{
$and: [
{
saleDate: { $gte: new Date("2017-01-01") }
},
{
'items.4': { $exists: true }
} ]
}

上記のクエリをQueryバーで適用すると、次のチャートと集計パイプラインが生成されます。

クエリを使用した集計パイプラインの例。
クリックして拡大します

集計パイプライン:

1{
2 "$match": { // Query
3 "$and": [
4 {
5 "saleDate": {
6 "$gte": {
7 "$date": "2017-01-01T00:00:00Z"
8 }
9 }
10 },
11 {
12 "items.4": {
13 "$exists": true
14 }
15 }
16 ]
17 }
18},
19{
20 "$addFields": {
21 "__alias_0": {
22 "$sum": "$items.price"
23 }
24 }
25},
26{
27 "$group": {
28 "_id": {
29 "__alias_1": "$purchaseMethod"
30 },
31 "__alias_0": {
32 "$sum": "$__alias_0"
33 }
34 }
35},
36{
37 "$project": {
38 "_id": 0,
39 "__alias_1": "$_id.__alias_1",
40 "__alias_0": 1
41 }
42},
43{
44 "$project": {
45 "x": "$__alias_1",
46 "y": "$__alias_0",
47 "_id": 0
48 }
49},
50{
51 "$addFields": {
52 "__agg_sum": {
53 "$sum": [
54 "$y"
55 ]
56 }
57 }
58},
59{
60 "$sort": {
61 "__agg_sum": -1
62 }
63},
64{
65 "$project": {
66 "__agg_sum": 0
67 }
68},
69{
70 "$limit": 5000
71}

集計パイプラインは、クエリが適用された状態で開始され、 Encodeパネルで選択されたグループと最大ドキュメント制限が続くようになりました。

また、 チャートを変更して、生成された総売上額を購入方法別に分類することもできます。 このタスクを実行するために、価格と数量を掛けて合計売上額を計算する計算フィールドを作成します。 上記のクエリに加えて、この新しい計算フィールドを追加すると、次のチャートとパイプラインが生成されます。

計算フィールド式:

計算フィールドを持つ集計パイプラインの例。
クリックして拡大します

集計パイプライン:

1{
2 "$match": {
3 "$and": [
4 {
5 "saleDate": {
6 "$gte": {
7 "$date": "2017-01-01T00:00:00Z"
8 }
9 }
10 },
11 {
12 "items.4": {
13 "$exists": true
14 }
15 }
16 ]
17 }
18},
19{
20 "$addFields": { // Calculated Field
21 "revenue": {
22 "$reduce": {
23 "input": "$items",
24 "initialValue": 0,
25 "in": {
26 "$sum": [
27 "$$value",
28 {
29 "$multiply": [
30 "$$this.price",
31 "$$this.quantity"
32 ]
33 }
34 ]
35 }
36 }
37 }
38 }
39},
40{
41 "$group": {
42 "_id": {
43 "__alias_0": "$purchaseMethod"
44 },
45 "__alias_1": {
46 "$sum": "$revenue"
47 }
48 }
49},
50{
51 "$project": {
52 "_id": 0,
53 "__alias_0": "$_id.__alias_0",
54 "__alias_1": 1
55 }
56},
57{
58 "$project": {
59 "x": "$__alias_0",
60 "y": "$__alias_1",
61 "_id": 0
62 }
63},
64{
65 "$addFields": {
66 "__agg_sum": {
67 "$sum": [
68 "$y"
69 ]
70 }
71 }
72},
73{
74 "$sort": {
75 "__agg_sum": -1
76 }
77},
78{
79 "$project": {
80 "__agg_sum": 0
81 }
82},
83{
84 "$limit": 5000
85}

更新されたパイプラインには、 Queryバーに適用されるクエリの直下に 計算フィールドが含まれるようになりましたが、コンポーネントの残りの順序は変更されません。

このチャートをさらに絞り込むには、 Filterペインにフィルターを追加して、ニューヨークのロケーションで行われた店舗内販売のみを選択します。 このフィルターを追加すると、次のチャートと集計パイプラインが生成されます。

フィルター付きの集計パイプラインの例。
クリックして拡大します

集計パイプライン:

1{
2 "$match": {
3 "$and": [
4 {
5 "saleDate": {
6 "$gte": {
7 "$date": "2017-01-01T00:00:00Z"
8 }
9 }
10 },
11 {
12 "items.4": {
13 "$exists": true
14 }
15 }
16 ]
17 }
18},
19{
20 "$addFields": {
21 "revenue": {
22 "$reduce": {
23 "input": "$items",
24 "initialValue": 0,
25 "in": {
26 "$sum": [
27 "$$value",
28 {
29 "$multiply": [
30 "$$this.price",
31 "$$this.quantity"
32 ]
33 }
34 ]
35 }
36 }
37 }
38 }
39},
40{
41 "$match": { // Filter
42 "storeLocation": {
43 "$in": [
44 "New York"
45 ]
46 }
47 }
48},
49{
50 "$group": {
51 "_id": {
52 "__alias_0": "$purchaseMethod"
53 },
54 "__alias_1": {
55 "$sum": "$revenue"
56 }
57 }
58},
59{
60 "$project": {
61 "_id": 0,
62 "__alias_0": "$_id.__alias_0",
63 "__alias_1": 1
64 }
65},
66{
67 "$project": {
68 "x": "$__alias_0",
69 "y": "$__alias_1",
70 "_id": 0
71 }
72},
73{
74 "$addFields": {
75 "__agg_sum": {
76 "$sum": [
77 "$y"
78 ]
79 }
80 }
81},
82{
83 "$sort": {
84 "__agg_sum": -1
85 }
86},
87{
88 "$project": {
89 "__agg_sum": 0
90 }
91},
92{
93 "$limit": 5000
94}

パイプラインには、計算フィールドの直下にstoreLocationフィルターが含まれるようになりましたが、コンポーネントの残りの順序は変更されません。

戻る

サブセット モード