このチュートリアルでは、集計パイプラインを構築し、コレクションに対して集計を実行し、選択した言語を使用して結果を表示する方法を説明します。
このタスクについて
このチュートリアルでは、カスタマーの注文データからインサイトを作成する方法を説明します。結果には、コストが$15 を超える注文された製品のリストが表示されます。各ドキュメントには、販売されたユニット数と各製品の合計売上額が含まれています。
集計パイプラインでは、次の操作が実行されます。
配列フィールドを個別のドキュメントに展開
フィールド値でドキュメントのサブセットと一致
ドキュメントを共通のフィールド値でグループ化
各結果ドキュメントに計算フィールドを追加します
始める前に
➤ 右上の[ 言語選択 ] ドロップダウンメニューを使用して、以下の例の言語を設定するか、 MongoDB Shell を選択します。
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用します。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
orders
コレクションを作成するには、insertMany()
メソッドを使用します。
db.orders.deleteMany({}) db.orders.insertMany( [ { order_id: 6363763262239, products: [ { prod_id: "abc12345", name: "Asus Laptop", price: 431 }, { prod_id: "def45678", name: "Karcher Hose Set", price: 22 } ] }, { order_id: 1197372932325, products: [ { prod_id: "abc12345", name: "Asus Laptop", price: 429 } ] }, { order_id: 9812343774839, products: [ { prod_id: "pqr88223", name: "Morphy Richards Food Mixer", price: 431 }, { prod_id: "def45678", name: "Karcher Hose Set", price: 21 } ] }, { order_id: 4433997244387, products: [ { prod_id: "def45678", name: "Karcher Hose Set", price: 23 }, { prod_id: "jkl77336", name: "Picky Pencil Sharpener", price: 1 }, { prod_id: "xyz11228", name: "Russell Hobbs Chrome Kettle", price: 16 } ] } ] )
テンプレート アプリの作成
この集計チュートリアルに従う前に、新しいCアプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
ドライバーをインストールしてMongoDBに接続する方法については、「 Cドライバーを使い始める 」ガイドを参照してください。
Cドライバーで集計を実行する方法の詳細については、「 集計ガイド 」を参照してください。
ドライバーをインストールしたら、agg-tutorial.c
というファイルを作成します。このファイルに次のコードを貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
int main(void) { mongoc_init(); // Replace the placeholder with your connection string. char *uri = "<connection string>"; mongoc_client_t* client = mongoc_client_new(uri); // Get a reference to relevant collections. // ... mongoc_collection_t *some_coll = mongoc_client_get_collection(client, "agg_tutorials_db", "some_coll"); // ... mongoc_collection_t *another_coll = mongoc_client_get_collection(client, "agg_tutorials_db", "another_coll"); // Delete any existing documents in collections if needed. // ... { // ... bson_t *filter = bson_new(); // ... bson_error_t error; // ... if (!mongoc_collection_delete_many(some_coll, filter, NULL, NULL, &error)) // ... { // ... fprintf(stderr, "Delete error: %s\n", error.message); // ... } // ... bson_destroy(filter); // ... } // Insert sample data into the collection or collections. // ... { // ... size_t num_docs = ...; // ... bson_t *docs[num_docs]; // ... // ... docs[0] = ...; // ... // ... bson_error_t error; // ... if (!mongoc_collection_insert_many(some_coll, (const bson_t **)docs, num_docs, NULL, NULL, &error)) // ... { // ... fprintf(stderr, "Insert error: %s\n", error.message); // ... } // ... // ... for (int i = 0; i < num_docs; i++) // ... { // ... bson_destroy(docs[i]); // ... } // ... } { const bson_t *doc; // Add code to create pipeline stages. bson_t *pipeline = BCON_NEW("pipeline", "[", // ... Add pipeline stages here. "]"); // Run the aggregation. // ... mongoc_cursor_t *results = mongoc_collection_aggregate(some_coll, MONGOC_QUERY_NONE, pipeline, NULL, NULL); bson_destroy(pipeline); // Print the aggregation results. while (mongoc_cursor_next(results, &doc)) { char *str = bson_as_canonical_extended_json(doc, NULL); printf("%s\n", str); bson_free(str); } bson_error_t error; if (mongoc_cursor_error(results, &error)) { fprintf(stderr, "Aggregation error: %s\n", error.message); } mongoc_cursor_destroy(results); } // Clean up resources. // ... mongoc_collection_destroy(some_coll); mongoc_client_destroy(client); mongoc_cleanup(); return EXIT_SUCCESS; }
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
char *uri = "mongodb+srv://mongodb-example:27017";
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
mongoc_collection_t *orders = mongoc_client_get_collection(client, "agg_tutorials_db", "orders"); { bson_t *filter = bson_new(); bson_error_t error; if (!mongoc_collection_delete_many(orders, filter, NULL, NULL, &error)) { fprintf(stderr, "Delete error: %s\n", error.message); } bson_destroy(filter); } { size_t num_docs = 4; bson_t *docs[num_docs]; docs[0] = BCON_NEW( "order_id", BCON_INT64(6363763262239), "products", "[", "{", "prod_id", BCON_UTF8("abc12345"), "name", BCON_UTF8("Asus Laptop"), "price", BCON_INT32(431), "}", "{", "prod_id", BCON_UTF8("def45678"), "name", BCON_UTF8("Karcher Hose Set"), "price", BCON_INT32(22), "}", "]"); docs[1] = BCON_NEW( "order_id", BCON_INT64(1197372932325), "products", "[", "{", "prod_id", BCON_UTF8("abc12345"), "name", BCON_UTF8("Asus Laptop"), "price", BCON_INT32(429), "}", "]"); docs[2] = BCON_NEW( "order_id", BCON_INT64(9812343774839), "products", "[", "{", "prod_id", BCON_UTF8("pqr88223"), "name", BCON_UTF8("Morphy Richards Food Mixer"), "price", BCON_INT32(431), "}", "{", "prod_id", BCON_UTF8("def45678"), "name", BCON_UTF8("Karcher Hose Set"), "price", BCON_INT32(21), "}", "]"); docs[3] = BCON_NEW( "order_id", BCON_INT64(4433997244387), "products", "[", "{", "prod_id", BCON_UTF8("def45678"), "name", BCON_UTF8("Karcher Hose Set"), "price", BCON_INT32(23), "}", "{", "prod_id", BCON_UTF8("jkl77336"), "name", BCON_UTF8("Picky Pencil Sharpener"), "price", BCON_INT32(1), "}", "{", "prod_id", BCON_UTF8("xyz11228"), "name", BCON_UTF8("Russell Hobbs Chrome Kettle"), "price", BCON_INT32(16), "}", "]"); bson_error_t error; if (!mongoc_collection_insert_many(orders, (const bson_t **)docs, num_docs, NULL, NULL, &error)) { fprintf(stderr, "Insert error: %s\n", error.message); } for (int i = 0; i < num_docs; i++) { bson_destroy(docs[i]); } }
テンプレート アプリの作成
集計チュートリアルに従う前に、新しいC++アプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
ドライバーをインストールしてMongoDBに接続する方法については、 「 C++を使い始める 」チュートリアルを参照してください。
C++ドライバーの使用の詳細については、 APIドキュメント を参照してください。
C++ドライバーで集計を実行する方法の詳細については、「 集計ガイド 」を参照してください。
ドライバーをインストールしたら、agg-tutorial.cpp
というファイルを作成します。このファイルに次のコードを貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
using bsoncxx::builder::basic::kvp; using bsoncxx::builder::basic::make_document; using bsoncxx::builder::basic::make_array; int main() { mongocxx::instance instance; // Replace the placeholder with your connection string. mongocxx::uri uri("<connection string>"); mongocxx::client client(uri); auto db = client["agg_tutorials_db"]; // Delete existing data in the database, if necessary. db.drop(); // Get a reference to relevant collections. // ... auto some_coll = db["..."]; // ... auto another_coll = db["..."]; // Insert sample data into the collection or collections. // ... some_coll.insert_many(docs); // Create an empty pipelne. mongocxx::pipeline pipeline; // Add code to create pipeline stages. // pipeline.match(make_document(...)); // Run the aggregation and print the results. auto cursor = orders.aggregate(pipeline); for (auto&& doc : cursor) { std::cout << bsoncxx::to_json(doc, bsoncxx::ExtendedJsonMode::k_relaxed) << std::endl; } }
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
mongocxx::uri uri{"mongodb+srv://mongodb-example:27017"};
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
auto orders = db["orders"]; std::vector<bsoncxx::document::value> order_docs = { bsoncxx::from_json(R"({ "order_id": 6363763262239, "products": [ { "prod_id": "abc12345", "name": "Asus Laptop", "price": 431 }, { "prod_id": "def45678", "name": "Karcher Hose Set", "price": 22 } ] })"), bsoncxx::from_json(R"({ "order_id": 1197372932325, "products": [ { "prod_id": "abc12345", "name": "Asus Laptop", "price": 429 } ] })"), bsoncxx::from_json(R"({ "order_id": 9812343774839, "products": [ { "prod_id": "pqr88223", "name": "Morphy Richards Food Mixer", "price": 431 }, { "prod_id": "def45678", "name": "Karcher Hose Set", "price": 21 } ] })"), bsoncxx::from_json(R"({ "order_id": 4433997244387, "products": [ { "prod_id": "def45678", "name": "Karcher Hose Set", "price": 23 }, { "prod_id": "jkl77336", "name": "Picky Pencil Sharpener", "price": 1 }, { "prod_id": "xyz11228", "name": "Russell Hobbs Chrome Kettle", "price": 16 } ] })") }; orders.insert_many(order_docs); // Might throw an exception
テンプレート アプリの作成
この集計チュートリアルに従う前に、新しいC#/ .NETアプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
ドライバーをインストールしてMongoDBに接続する方法については、 「 C# .NETドライバー クイック スタートガイド」を参照してください。
C#/ .NETドライバーで集計を実行する方法の詳細については、 集計ガイド を参照してください。
ドライバーをインストールしたら、次のコードを Program.cs
ファイルに貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
using MongoDB.Driver; using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; // Define data model classes. // ... public class MyClass { ... } // Replace the placeholder with your connection string. var uri = "<connection string>"; var client = new MongoClient(uri); var aggDB = client.GetDatabase("agg_tutorials_db"); // Get a reference to relevant collections. // ... var someColl = aggDB.GetCollection<MyClass>("someColl"); // ... var anotherColl = aggDB.GetCollection<MyClass>("anotherColl"); // Delete any existing documents in collections if needed. // ... someColl.DeleteMany(Builders<MyClass>.Filter.Empty); // Insert sample data into the collection or collections. // ... someColl.InsertMany(new List<MyClass> { ... }); // Add code to chain pipeline stages to the Aggregate() method. // ... var results = someColl.Aggregate().Match(...); // Print the aggregation results. foreach (var result in results.ToList()) { Console.WriteLine(result); }
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
Tip
配置の接続文字列を見つける方法については、 C#クイック スタートガイドの「 Atlas で無料階層クラスターを設定する 」のステップを参照してください。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
var uri = "mongodb+srv://mongodb-example:27017";
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
まず、orders
コレクション内のデータをモデル化するためのC#クラスを作成します。
public class Order { [ ] public ObjectId Id { get; set; } public long OrderId { get; set; } public List<Product> Products { get; set; } } public class OrderUnwound { public long OrderId { get; set; } public Product Products { get; set; } } public class Product { public string ProductId { get; set; } public string Name { get; set; } public int Price { get; set; } }
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
var orders = aggDB.GetCollection<Order>("orders"); orders.DeleteMany(Builders<Order>.Filter.Empty); orders.InsertMany(new List<Order> { new Order { OrderId = 6363763262239L, Products = new List<Product> { new Product { ProductId = "abc12345", Name = "Asus Laptop", Price = 431 }, new Product { ProductId = "def45678", Name = "Karcher Hose Set", Price = 22 } } }, new Order { OrderId = 1197372932325L, Products = new List<Product> { new Product { ProductId = "abc12345", Name = "Asus Laptop", Price = 429 } } }, new Order { OrderId = 9812343774839L, Products = new List<Product> { new Product { ProductId = "pqr88223", Name = "Morphy Richards Food Mixer", Price = 431 }, new Product { ProductId = "def45678", Name = "Karcher Hose Set", Price = 21 } } }, new Order { OrderId = 4433997244387L, Products = new List<Product> { new Product { ProductId = "def45678", Name = "Karcher Hose Set", Price = 23 }, new Product { ProductId = "jkl77336", Name = "Picky Pencil Sharpener", Price = 1 }, new Product { ProductId = "xyz11228", Name = "Russell Hobbs Chrome Kettle", Price = 16 } } } });
テンプレート アプリの作成
この集計チュートリアルに従う前に、新しいGoアプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
ドライバーをインストールしてMongoDBに接続する方法については、 「 Go Driver クイック スタートガイド」を参照してください。
Go Driver で集計を実行する方法の詳細については、「 集計ガイド 」を参照してください。
ドライバーをインストールしたら、agg_tutorial.go
というファイルを作成します。このファイルに次のコードを貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
package main import ( "context" "fmt" "log" "time" "go.mongodb.org/mongo-driver/v2/bson" "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" ) // Define structs. // type MyStruct struct { ... } func main() { // Replace the placeholder with your connection string. const uri = "<connection string>" client, err := mongo.Connect(options.Client().ApplyURI(uri)) if err != nil { log.Fatal(err) } defer func() { if err = client.Disconnect(context.TODO()); err != nil { log.Fatal(err) } }() aggDB := client.Database("agg_tutorials_db") // Get a reference to relevant collections. // ... someColl := aggDB.Collection("...") // ... anotherColl := aggDB.Collection("...") // Delete any existing documents in collections if needed. // ... someColl.DeleteMany(context.TODO(), bson.D{}) // Insert sample data into the collection or collections. // ... _, err = someColl.InsertMany(...) // Add code to create pipeline stages. // ... myStage := bson.D{{...}} // Create a pipeline that includes the stages. // ... pipeline := mongo.Pipeline{...} // Run the aggregation. // ... cursor, err := someColl.Aggregate(context.TODO(), pipeline) if err != nil { log.Fatal(err) } defer func() { if err := cursor.Close(context.TODO()); err != nil { log.Fatalf("failed to close cursor: %v", err) } }() // Decode the aggregation results. var results []bson.D if err = cursor.All(context.TODO(), &results); err != nil { log.Fatalf("failed to decode results: %v", err) } // Print the aggregation results. for _, result := range results { res, _ := bson.MarshalExtJSON(result, false, false) fmt.Println(string(res)) } }
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
Tip
配置の接続文字列を見つける方法については、 Goクイック スタートガイドの「 MongoDBクラスターの作成 」ステップを参照してください。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
const uri = "mongodb+srv://mongodb-example:27017";
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
まず、 Go構造体を作成して、orders
コレクション内のデータをモデル化します。
type Order struct { OrderID int `bson:"order_id"` Products []Product `bson:"products"` } type Product struct { ProductID string `bson:"prod_id"` Name string `bson:"name"` Price int `bson:"price"` }
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
orders := aggDB.Collection("orders") orders.DeleteMany(context.TODO(), bson.D{}) _, err = orders.InsertMany(context.TODO(), []interface{}{ Order{ OrderID: 6363763262239, Products: []Product{ {ProductID: "abc12345", Name: "Asus Laptop", Price: 431}, {ProductID: "def45678", Name: "Karcher Hose Set", Price: 22}, }, }, Order{ OrderID: 1197372932325, Products: []Product{ {ProductID: "abc12345", Name: "Asus Laptop", Price: 429}, }, }, Order{ OrderID: 9812343774839, Products: []Product{ {ProductID: "pqr88223", Name: "Morphy Richards Food Mixer", Price: 431}, {ProductID: "def45678", Name: "Karcher Hose Set", Price: 21}, }, }, Order{ OrderID: 4433997244387, Products: []Product{ {ProductID: "def45678", Name: "Karcher Hose Set", Price: 23}, {ProductID: "jkl77336", Name: "Picky Pencil Sharpene", Price: 1}, {ProductID: "xyz11228", Name: "Russell Hobbs Chrome Kettle", Price: 16}, }, }, }) if err != nil { log.Fatal(err) }
テンプレート アプリの作成
集計チュートリアルに従う前に、新しいJavaアプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
ドライバーをインストールしてMongoDBに接続する方法については、 Javaドライバーを使い始める のガイドを参照してください。
Java Sync Driver で集計を実行する方法の詳細については、 集計ガイドを参照してください。
ドライバーをインストールしたら、AggTutorial.java
というファイルを作成します。このファイルに次のコードを貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
package org.example; // Modify imports for each tutorial as needed. import com.mongodb.client.*; import com.mongodb.client.model.Aggregates; import com.mongodb.client.model.Filters; import com.mongodb.client.model.Sorts; import org.bson.Document; import org.bson.conversions.Bson; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class AggTutorial { public static void main( String[] args ) { // Replace the placeholder with your connection string. String uri = "<connection string>"; try (MongoClient mongoClient = MongoClients.create(uri)) { MongoDatabase aggDB = mongoClient.getDatabase("agg_tutorials_db"); // Get a reference to relevant collections. // ... MongoCollection<Document> someColl = ... // ... MongoCollection<Document> anotherColl = ... // Delete any existing documents in collections if needed. // ... someColl.deleteMany(Filters.empty()); // Insert sample data into the collection or collections. // ... someColl.insertMany(...); // Create an empty pipeline array. List<Bson> pipeline = new ArrayList<>(); // Add code to create pipeline stages. // ... pipeline.add(...); // Run the aggregation. // ... AggregateIterable<Document> aggregationResult = someColl.aggregate(pipeline); // Print the aggregation results. for (Document document : aggregationResult) { System.out.println(document.toJson()); } } } }
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
String uri = "mongodb+srv://mongodb-example:27017";
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
MongoCollection<Document> orders = aggDB.getCollection("orders"); orders.deleteMany(Filters.empty()); orders.insertMany( Arrays.asList( new Document("order_id", 6363763262239f) .append("products", Arrays.asList( new Document("prod_id", "abc12345") .append("name", "Asus Laptop") .append("price", 431), new Document("prod_id", "def45678") .append("name", "Karcher Hose Set") .append("price", 22) )), new Document("order_id", 1197372932325f) .append("products", Collections.singletonList( new Document("prod_id", "abc12345") .append("name", "Asus Laptop") .append("price", 429) )), new Document("order_id", 9812343774839f) .append("products", Arrays.asList( new Document("prod_id", "pqr88223") .append("name", "Morphy Richards Food Mixer") .append("price", 431), new Document("prod_id", "def45678") .append("name", "Karcher Hose Set") .append("price", 21) )), new Document("order_id", 4433997244387f) .append("products", Arrays.asList( new Document("prod_id", "def45678") .append("name", "Karcher Hose Set") .append("price", 23), new Document("prod_id", "jkl77336") .append("name", "Picky Pencil Sharpener") .append("price", 1), new Document("prod_id", "xyz11228") .append("name", "Russell Hobbs Chrome Kettle") .append("price", 16) )) ) );
テンプレート アプリの作成
集計チュートリアルに従う前に、新しいKotlinアプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
ドライバーをインストールしてMongoDBに接続する方法については、「 Kotlinドライバー クイック スタートガイド 」を参照してください。
Kotlinドライバーで集計を実行する方法の詳細については、「 集計ガイド 」を参照してください。
ドライバーに加えて、次の依存関係も build.gradle.kts
ファイルに追加し、プロジェクトを再読み込みする 必要があります。
dependencies { // Implements Kotlin serialization implementation("org.jetbrains.kotlinx:kotlinx-serialization-core:1.5.1") // Implements Kotlin date and time handling implementation("org.jetbrains.kotlinx:kotlinx-datetime:0.6.1") }
ドライバーをインストールしたら、AggTutorial.kt
というファイルを作成します。このファイルに次のコードを貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
package org.example // Modify imports for each tutorial as needed. import com.mongodb.client.model.* import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking import kotlinx.datetime.LocalDateTime import kotlinx.datetime.toJavaLocalDateTime import kotlinx.serialization.Contextual import kotlinx.serialization.Serializable import org.bson.Document import org.bson.conversions.Bson // Define data classes. data class MyClass( ... ) suspend fun main() { // Replace the placeholder with your connection string. val uri = "<connection string>" MongoClient.create(uri).use { mongoClient -> val aggDB = mongoClient.getDatabase("agg_tutorials_db") // Get a reference to relevant collections. // ... val someColl = ... // Delete any existing documents in collections if needed. // ... someColl.deleteMany(empty()) // Insert sample data into the collection or collections. // ... someColl.insertMany( ... ) // Create an empty pipeline. val pipeline = mutableListOf<Bson>() // Add code to create pipeline stages. // ... pipeline.add(...) // Run the aggregation. // ... val aggregationResult = someColl.aggregate<Document>(pipeline) // Print the aggregation results. aggregationResult.collect { println(it) } } }
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
val uri = "mongodb+srv://mongodb-example:27017"
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
まず、orders
コレクション内のデータをモデル化するためのKotlinデータ クラスを作成します。
data class Order( val orderID: Float, val products: List<Product> ) data class Product( val prodID: String, val name: String, val price: Int )
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
val orders = aggDB.getCollection<Order>("orders") orders.deleteMany(Filters.empty()) orders.insertMany( listOf( Order( 6363763262239f, listOf( Product("abc12345", "Asus Laptop", 431), Product("def45678", "Karcher Hose Set", 22) ) ), Order( 1197372932325f, listOf( Product("abc12345", "Asus Laptop", 429) ) ), Order( 9812343774839f, listOf( Product("pqr88223", "Morphy Richards Food Mixer", 431), Product("def45678", "Karcher Hose Set", 21) ) ), Order( 4433997244387f, listOf( Product("def45678", "Karcher Hose Set", 23), Product("jkl77336", "Picky Pencil Sharpener", 1), Product("xyz11228", "Russell Hobbs Chrome Kettle", 16) ) ) ) )
テンプレート アプリの作成
この集計チュートリアルに従う前に、新しいNode.jsアプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
ドライバーをインストールしてMongoDBに接続する方法については、 Node.jsドライバー クイック スタートガイドを参照してください。
Node.jsドライバーで集計を実行する方法の詳細については、「 集計ガイド 」を参照してください。
ドライバーをインストールしたら、agg_tutorial.js
というファイルを作成します。このファイルに次のコードを貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
const { MongoClient } = require("mongodb"); // Replace the placeholder with your connection string. const uri = "<connection string>"; const client = new MongoClient(uri); async function run() { try { const aggDB = client.db("agg_tutorials_db"); // Get a reference to relevant collections. // ... const someColl = // ... const anotherColl = // Delete any existing documents in collections. // ... await someColl.deleteMany({}); // Insert sample data into the collection or collections. // ... const someData = [ ... ]; // ... await someColl.insertMany(someData); // Create an empty pipeline array. const pipeline = []; // Add code to create pipeline stages. // ... pipeline.push({ ... }) // Run the aggregation. // ... const aggregationResult = ... // Print the aggregation results. for await (const document of aggregationResult) { console.log(document); } } finally { await client.close(); } } run().catch(console.dir);
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
const uri = "mongodb+srv://mongodb-example:27017";
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
const orders = aggDB.collection("orders"); await orders.deleteMany({}); await orders.insertMany([ { order_id: 6363763262239, products: [ { prod_id: "abc12345", name: "Asus Laptop", price: 431, }, { prod_id: "def45678", name: "Karcher Hose Set", price: 22, }, ], }, { order_id: 1197372932325, products: [ { prod_id: "abc12345", name: "Asus Laptop", price: 429, }, ], }, { order_id: 9812343774839, products: [ { prod_id: "pqr88223", name: "Morphy Richards Food Mixer", price: 431, }, { prod_id: "def45678", name: "Karcher Hose Set", price: 21, }, ], }, { order_id: 4433997244387, products: [ { prod_id: "def45678", name: "Karcher Hose Set", price: 23, }, { prod_id: "jkl77336", name: "Picky Pencil Sharpener", price: 1, }, { prod_id: "xyz11228", name: "Russell Hobbs Chrome Kettle", price: 16, }, ], }, ]);
テンプレート アプリの作成
この集計チュートリアルに従う前に、新しいPHPアプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
PHPライブラリをインストールしてMongoDBに接続する方法については、 「 PHPライブラリを使い始める 」チュートリアルを参照してください。
PHPライブラリで集計を実行する方法の詳細については、 集計ガイド を参照してください。
ライブラリをインストールしたら、agg_tutorial.php
というファイルを作成します。このファイルに次のコードを貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
require 'vendor/autoload.php'; // Modify imports for each tutorial as needed. use MongoDB\Client; use MongoDB\BSON\UTCDateTime; use MongoDB\Builder\Pipeline; use MongoDB\Builder\Stage; use MongoDB\Builder\Type\Sort; use MongoDB\Builder\Query; use MongoDB\Builder\Expression; use MongoDB\Builder\Accumulator; use function MongoDB\object; // Replace the placeholder with your connection string. $uri = '<connection string>'; $client = new Client($uri); // Get a reference to relevant collections. // ... $someColl = $client->agg_tutorials_db->someColl; // ... $anotherColl = $client->agg_tutorials_db->anotherColl; // Delete any existing documents in collections if needed. // ... $someColl->deleteMany([]); // Insert sample data into the collection or collections. // ... $someColl->insertMany(...); // Add code to create pipeline stages within the Pipeline instance. // ... $pipeline = new Pipeline(...); // Run the aggregation. // ... $cursor = $someColl->aggregate($pipeline); // Print the aggregation results. foreach ($cursor as $doc) { echo json_encode($doc, JSON_PRETTY_PRINT), PHP_EOL; }
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
$uri = 'mongodb+srv://mongodb-example:27017';
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
$orders = $client->agg_tutorials_db->orders; $orders->deleteMany([]); $orders->insertMany( [ [ 'order_id' => 6363763262239, 'products' => [ [ 'prod_id' => 'abc12345', 'name' => 'Asus Laptop', 'price' => 431, ], [ 'prod_id' => 'def45678', 'name' => 'Karcher Hose Set', 'price' => 22, ], ], ], [ 'order_id' => 1197372932325, 'products' => [ [ 'prod_id' => 'abc12345', 'name' => 'Asus Laptop', 'price' => 429, ], ], ], [ 'order_id' => 9812343774839, 'products' => [ [ 'prod_id' => 'pqr88223', 'name' => 'Morphy Richards Food Mixer', 'price' => 431, ], [ 'prod_id' => 'def45678', 'name' => 'Karcher Hose Set', 'price' => 21, ], ], ], [ 'order_id' => 4433997244387, 'products' => [ [ 'prod_id' => 'def45678', 'name' => 'Karcher Hose Set', 'price' => 23, ], [ 'prod_id' => 'jkl77336', 'name' => 'Picky Pencil Sharpener', 'price' => 1, ], [ 'prod_id' => 'xyz11228', 'name' => 'Russell Hobbs Chrome Kettle', 'price' => 16, ], ], ] ] );
テンプレート アプリの作成
この集計チュートリアルに従う前に、新しいPythonアプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
PyMongoをインストールし、 MongoDBに接続する方法については、 「 PyMongoを使い始める 」チュートリアルを参照してください。
PyMongoで集計を実行する方法の詳細については、 集計ガイド を参照してください。
ライブラリをインストールしたら、agg_tutorial.py
というファイルを作成します。このファイルに次のコードを貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
# Modify imports for each tutorial as needed. from pymongo import MongoClient # Replace the placeholder with your connection string. uri = "<connection string>" client = MongoClient(uri) try: agg_db = client["agg_tutorials_db"] # Get a reference to relevant collections. # ... some_coll = agg_db["some_coll"] # ... another_coll = agg_db["another_coll"] # Delete any existing documents in collections if needed. # ... some_coll.delete_many({}) # Insert sample data into the collection or collections. # ... some_coll.insert_many(...) # Create an empty pipeline array. pipeline = [] # Add code to create pipeline stages. # ... pipeline.append({...}) # Run the aggregation. # ... aggregation_result = ... # Print the aggregation results. for document in aggregation_result: print(document) finally: client.close()
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
uri = "mongodb+srv://mongodb-example:27017"
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
orders_coll = agg_db["orders"] orders_coll.delete_many({}) order_data = [ { "order_id": 6363763262239, "products": [ { "prod_id": "abc12345", "name": "Asus Laptop", "price": 431, }, { "prod_id": "def45678", "name": "Karcher Hose Set", "price": 22, }, ], }, { "order_id": 1197372932325, "products": [ { "prod_id": "abc12345", "name": "Asus Laptop", "price": 429, } ], }, { "order_id": 9812343774839, "products": [ { "prod_id": "pqr88223", "name": "Morphy Richards Food Mixer", "price": 431, }, { "prod_id": "def45678", "name": "Karcher Hose Set", "price": 21, }, ], }, { "order_id": 4433997244387, "products": [ { "prod_id": "def45678", "name": "Karcher Hose Set", "price": 23, }, { "prod_id": "jkl77336", "name": "Picky Pencil Sharpener", "price": 1, }, { "prod_id": "xyz11228", "name": "Russell Hobbs Chrome Kettle", "price": 16, }, ], }, ] orders_coll.insert_many(order_data)
テンプレート アプリの作成
この集計チュートリアルに従う前に、新しいRubyアプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
RubyドライバーをインストールしてMongoDBに接続する方法については、 「Rubyドライバーを使い始める」ガイドを参照してください。
Rubyドライバーで集計を実行する方法の詳細については、 集計ガイド を参照してください。
ドライバーをインストールしたら、agg_tutorial.rb
というファイルを作成します。このファイルに次のコードを貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
# typed: strict require 'mongo' require 'bson' # Replace the placeholder with your connection string. uri = "<connection string>" Mongo::Client.new(uri) do |client| agg_db = client.use('agg_tutorials_db') # Get a reference to relevant collections. # ... some_coll = agg_db[:some_coll] # Delete any existing documents in collections if needed. # ... some_coll.delete_many({}) # Insert sample data into the collection or collections. # ... some_coll.insert_many( ... ) # Add code to create pipeline stages within the array. # ... pipeline = [ ... ] # Run the aggregation. # ... aggregation_result = some_coll.aggregate(pipeline) # Print the aggregation results. aggregation_result.each do |doc| puts doc end end
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
uri = "mongodb+srv://mongodb-example:27017"
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
orders = agg_db[:orders] orders.delete_many({}) orders.insert_many( [ { order_id: 6363763262239, products: [ { prod_id: "abc12345", name: "Asus Laptop", price: 431, }, { prod_id: "def45678", name: "Karcher Hose Set", price: 22, }, ], }, { order_id: 1197372932325, products: [ { prod_id: "abc12345", name: "Asus Laptop", price: 429, }, ], }, { order_id: 9812343774839, products: [ { prod_id: "pqr88223", name: "Morphy Richards Food Mixer", price: 431, }, { prod_id: "def45678", name: "Karcher Hose Set", price: 21, }, ], }, { order_id: 4433997244387, products: [ { prod_id: "def45678", name: "Karcher Hose Set", price: 23, }, { prod_id: "jkl77336", name: "Picky Pencil Sharpener", price: 1, }, { prod_id: "xyz11228", name: "Russell Hobbs Chrome Kettle", price: 16, }, ], }, ] )
テンプレート アプリの作成
この集計チュートリアルに従う前に、新しいRustアプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
ドライバーをインストールしてMongoDBに接続する方法については、 Rustドライバー クイック スタートガイド を参照してください。
Rustドライバーで集計を実行する方法の詳細については、「 集計ガイド 」を参照してください。
ドライバーをインストールしたら、agg-tutorial.rs
というファイルを作成します。このファイルに次のコードを貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
use mongodb::{ bson::{doc, Document}, options::ClientOptions, Client, }; use futures::stream::TryStreamExt; use std::error::Error; // Define structs. // #[derive(Debug, Serialize, Deserialize)] // struct MyStruct { ... } async fn main() mongodb::error::Result<()> { // Replace the placeholder with your connection string. let uri = "<connection string>"; let client = Client::with_uri_str(uri).await?; let agg_db = client.database("agg_tutorials_db"); // Get a reference to relevant collections. // ... let some_coll: Collection<T> = agg_db.collection("..."); // ... let another_coll: Collection<T> = agg_db.collection("..."); // Delete any existing documents in collections if needed. // ... some_coll.delete_many(doc! {}).await?; // Insert sample data into the collection or collections. // ... some_coll.insert_many(vec![...]).await?; // Create an empty pipeline. let mut pipeline = Vec::new(); // Add code to create pipeline stages. // pipeline.push(doc! { ... }); // Run the aggregation and print the results. let mut results = some_coll.aggregate(pipeline).await?; while let Some(result) = results.try_next().await? { println!("{:?}\n", result); } Ok(()) }
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
let uri = "mongodb+srv://mongodb-example:27017";
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
まず、orders
コレクション内のデータをモデル化するためのRust構造体を作成します。
struct Product { prod_id: String, name: String, price: i32, } struct Order { order_id: i64, products: Vec<Product>, }
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
let orders_coll: Collection<Order> = agg_db.collection("orders"); orders.delete_many(doc! {}).await?; let orders = vec![ Order { order_id: 6363763262239, products: vec![ Product { prod_id: "abc12345".to_string(), name: "Asus Laptop".to_string(), price: 431, }, Product { prod_id: "def45678".to_string(), name: "Karcher Hose Set".to_string(), price: 22, }, ], }, Order { order_id: 1197372932325, products: vec![Product { prod_id: "abc12345".to_string(), name: "Asus Laptop".to_string(), price: 429, }], }, Order { order_id: 9812343774839, products: vec![ Product { prod_id: "pqr88223".to_string(), name: "Morphy Richards Food Mixer".to_string(), price: 431, }, Product { prod_id: "def45678".to_string(), name: "Karcher Hose Set".to_string(), price: 21, }, ], }, Order { order_id: 4433997244387, products: vec![ Product { prod_id: "def45678".to_string(), name: "Karcher Hose Set".to_string(), price: 23, }, Product { prod_id: "jkl77336".to_string(), name: "Picky Pencil Sharpene".to_string(), price: 1, }, Product { prod_id: "xyz11228".to_string(), name: "Russell Hobbs Chrome Kettle".to_string(), price: 16, }, ], }, ]; orders_coll.insert_many(orders).await?;
テンプレート アプリの作成
集計チュートリアルに従う前に、新しいScalaアプリを設定する必要があります。このアプリを使用して、 MongoDBデプロイに接続し、サンプルデータをMongoDBに挿入し、集計パイプラインを実行できます。
Tip
ドライバーをインストールしてMongoDBに接続する方法については、 「 Scalaドライバーを使い始める 」ガイドを参照してください。
Scalaドライバーで集計を実行する方法の詳細については、「 集計ガイド 」を参照してください。
ドライバーをインストールしたら、AggTutorial.scala
というファイルを作成します。このファイルに次のコードを貼り付けて、集計チュートリアル用のアプリテンプレートを作成します。
重要
次のコードでは、コードコメントを読み取って、次のチュートリアルで変更する必要があるコードのセクションを見つけます。
変更せずにコードを実行しようとすると、接続エラーが発生します。
package org.example; // Modify imports for each tutorial as needed. import org.mongodb.scala.MongoClient import org.mongodb.scala.bson.Document import org.mongodb.scala.model.{Accumulators, Aggregates, Field, Filters, Variable} import java.text.SimpleDateFormat object FilteredSubset { def main(args: Array[String]): Unit = { // Replace the placeholder with your connection string. val uri = "<connection string>" val mongoClient = MongoClient(uri) Thread.sleep(1000) val aggDB = mongoClient.getDatabase("agg_tutorials_db") // Get a reference to relevant collections. // ... val someColl = aggDB.getCollection("someColl") // ... val anotherColl = aggDB.getCollection("anotherColl") // Delete any existing documents in collections if needed. // ... someColl.deleteMany(Filters.empty()).subscribe(...) // If needed, create the date format template. val dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss") // Insert sample data into the collection or collections. // ... someColl.insertMany(...).subscribe(...) Thread.sleep(1000) // Add code to create pipeline stages within the Seq. // ... val pipeline = Seq(...) // Run the aggregation and print the results. // ... someColl.aggregate(pipeline).subscribe(...) Thread.sleep(1000) mongoClient.close() } }
すべてのチュートリアルで、接続stringプレースホルダーを配置の接続stringに置き換える必要があります。
たとえば、接続stringが "mongodb+srv://mongodb-example:27017"
の場合、接続stringの割り当ては次のようになります。
val uri = "mongodb+srv://mongodb-example:27017"
コレクションの作成
この例では、製品の注文を説明するドキュメントを含む orders
コレクションを使用しています。各注文には複数の製品が含まれているため、集計の最初のステップでは、製品配列を個別の製品注文ドキュメントに解凍します。
orders
コレクションを作成し、サンプルデータを挿入するには、次のコードをアプリケーションに追加します。
val orders = aggDB.getCollection("orders") orders.deleteMany(Filters.empty()).subscribe( _ => {}, e => println("Error: " + e.getMessage), ) orders.insertMany(Seq( Document( "order_id" -> 6363763262239L, "products" -> Seq( Document( "prod_id" -> "abc12345", "name" -> "Asus Laptop", "price" -> 431 ), Document( "prod_id" -> "def45678", "name" -> "Karcher Hose Set", "price" -> 22 ) ) ), Document( "order_id" -> 1197372932325L, "products" -> Seq( Document( "prod_id" -> "abc12345", "name" -> "Asus Laptop", "price" -> 429 ) ) ), Document( "order_id" -> 9812343774839L, "products" -> Seq( Document( "prod_id" -> "pqr88223", "name" -> "Morphy Richards Food Mixer", "price" -> 431 ), Document( "prod_id" -> "def45678", "name" -> "Karcher Hose Set", "price" -> 21 ) ) ), Document( "order_id" -> 4433997244387L, "products" -> Seq( Document( "prod_id" -> "def45678", "name" -> "Karcher Hose Set", "price" -> 23 ), Document( "prod_id" -> "jkl77336", "name" -> "Picky Pencil Sharpener", "price" -> 1 ), Document( "prod_id" -> "xyz11228", "name" -> "Russell Hobbs Chrome Kettle", "price" -> 16 ) ) ) )).subscribe( _ => {}, e => println("Error: " + e.getMessage), )
手順
次の手順では、集計パイプラインを作成して実行し、配列フィールドを個別のドキュメントに解凍し、共通値のグループに基づいて新しい値を計算する方法を示します。
集計パイプラインを実行します。
db.orders.aggregate( [ // Stage 1: Unwind the array of product orders { $unwind: { path: "$products" } }, // Stage 2: Match products that cost more than $15 { $match: { "products.price": { $gt: 15 } } }, // Stage 3: Group products by product type { $group: { _id: "$products.prod_id", product: { $first: "$products.name" }, total_value: { $sum: "$products.price" }, quantity: { $sum: 1 } } }, // Stage 4: Display the product ID { $set: { product_id: "$_id" } }, // Stage 5: Remove unneeded fields { $unset: [ "_id"] } ] )
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
{ product: 'Asus Laptop', total_value: 860, quantity: 2, product_id: 'abc12345' } { product: 'Morphy Richards Food Mixer', total_value: 431, quantity: 1, product_id: 'pqr88223' } { product: 'Russell Hobbs Chrome Kettle', total_value: 16, quantity: 1, product_id: 'xyz11228' } { product: 'Karcher Hose Set', total_value: 66, quantity: 3, product_id: 'def45678' }
注意
この例を実行した場合、集計パイプラインにソート ステージが含まれていないため、結果内のドキュメントの順序がこのページのドキュメントの順序と異なる場合があります。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 ステージを追加して、$unwind
配列のエントリを個々のドキュメントに分割します。products
"{", "$unwind", "{", "path", BCON_UTF8("$products"), "}", "}",
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、products.price
の値が より大きい製品に一致する ステージを追加します。15
"{", "$match", "{", "products.price", "{", "$gt", BCON_INT32(15), "}", "}", "}",
製品の種類ごとにグループ化するためのグループ ステージを追加します。
$group
フィールドの値で注文ドキュメントを収集するために、prod_id
ステージを追加します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
product
: 製品名total_value
: 製品の全売上の合計値quantity
: 製品の注文数
"{", "$group", "{", "_id", BCON_UTF8("$products.prod_id"), "product", "{", "$first", BCON_UTF8("$products.name"), "}", "total_value", "{", "$sum", BCON_UTF8("$products.price"), "}", "quantity", "{", "$sum", BCON_INT32(1), "}", "}", "}",
製品IDを表示するには、 セット ステージを追加します。
$set
ステージを追加して、 ステージ中に設定されたproduct_id
フィールドの値から フィールドを再作成します。_id
$group
"{", "$set", "{", "product_id", BCON_UTF8("$_id"), "}", "}",
不要なフィールドを削除するには、設定されていない ステージを追加します。
最後に、$unset
ステージを追加します。$unset
ステージでは、結果ドキュメントから フィールドが削除されます。_id
"{", "$unset", "[", BCON_UTF8("_id"), "]", "}",
集計パイプラインを実行します。
次のコードをアプリケーションの末尾に追加して、 orders
コレクションで集計を実行します。
mongoc_cursor_t *results = mongoc_collection_aggregate(orders, MONGOC_QUERY_NONE, pipeline, NULL, NULL); bson_destroy(pipeline);
クリーンアップ ステートメントに次の行を追加して、コレクションリソースをクリーンアップするようにします。
mongoc_collection_destroy(orders);
最後に、 シェルで次のコマンドを実行して実行可能ファイルを生成および実行します。
gcc -o aggc agg-tutorial.c $(pkg-config --libs --cflags libmongoc-1.0) ./aggc
Tip
上記のコマンドを 1 回の呼び出しで実行中て接続エラーが発生した場合は、個別に実行できます。
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
{ "product" : "Asus Laptop", "total_value" : { "$numberInt" : "860" }, "quantity" : { "$numberInt" : "2" }, "product_id" : "abc12345" } { "product" : "Karcher Hose Set", "total_value" : { "$numberInt" : "66" }, "quantity" : { "$numberInt" : "3" }, "product_id" : "def45678" } { "product" : "Morphy Richards Food Mixer", "total_value" : { "$numberInt" : "431" }, "quantity" : { "$numberInt" : "1" }, "product_id" : "pqr88223" } { "product" : "Russell Hobbs Chrome Kettle", "total_value" : { "$numberInt" : "16" }, "quantity" : { "$numberInt" : "1" }, "product_id" : "xyz11228" }
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 ステージを追加して、$unwind
配列のエントリを個々のドキュメントに分割します。products
pipeline.unwind("$products");
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、products.price
の値が より大きい製品に一致する ステージを追加します。15
pipeline.match(bsoncxx::from_json(R"({ "products.price": { "$gt": 15 } })"));
製品の種類ごとにグループ化するためのグループ ステージを追加します。
$group
フィールドの値で注文ドキュメントを収集するために、prod_id
ステージを追加します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
product
: 製品名total_value
: 製品の全売上の合計値quantity
: 製品の注文数
pipeline.group(bsoncxx::from_json(R"({ "_id": "$products.prod_id", "product": { "$first": "$products.name" }, "total_value": { "$sum": "$products.price" }, "quantity": { "$sum": 1 } })"));
製品IDを表示するには、 addFields ステージを追加します。
$addFields
ステージを追加して、 ステージ中に設定されたproduct_id
フィールドの値から フィールドを再作成します。_id
$group
pipeline.add_fields(bsoncxx::from_json(R"({ "product_id": "$_id" })"));
不要なフィールドを削除するには、設定されていない ステージを追加します。
最後に、$unset
ステージを追加します。$unset
ステージでは、結果ドキュメントから フィールドが削除されます。_id
pipeline.append_stage(bsoncxx::from_json(R"({ "$unset": ["_id"] })"));
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
{ "product" : "Karcher Hose Set", "total_value" : 66, "quantity" : 3, "product_id" : "def45678" } { "product" : "Asus Laptop", "total_value" : 860, "quantity" : 2, "product_id" : "abc12345" } { "product" : "Morphy Richards Food Mixer", "total_value" : 431, "quantity" : 1, "product_id" : "pqr88223" } { "product" : "Russell Hobbs Chrome Kettle", "total_value" : 16, "quantity" : 1, "product_id" : "xyz11228" }
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 コレクションで集計を開始し、 ステージを連鎖させて、orders
$unwind
配列のエントリを個々のドキュメントに分割します。Products
var results = orders.Aggregate() .Unwind<Order, OrderUnwound>(o => o.Products)
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、Products.Price
の値が より大きい製品に一致する ステージを追加します。15
.Match(o => o.Products.Price > 15)
製品の種類ごとにグループ化するためのグループ ステージを追加します。
$group
フィールドの値で注文ドキュメントを収集するために、ProductId
ステージを追加します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
ProductId
: 製品ID (グループ化キー)Product
: 製品名TotalValue
: 製品の全売上の合計値Quantity
: 製品の注文数
.Group( id: o => o.Products.ProductId, group: g => new { ProductId = g.Key, Product = g.First().Products.Name, TotalValue = g.Sum(o => o.Products.Price), Quantity = g.Count(), } );
集計を実行し、結果を解釈します。
最後に、IDE でアプリケーションを実行し、結果を調べます。
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
{ ProductId = pqr88223, Product = Morphy Richards Food Mixer, TotalValue = 431, Quantity = 1 } { ProductId = xyz11228, Product = Russell Hobbs Chrome Kettle, TotalValue = 16, Quantity = 1 } { ProductId = abc12345, Product = Asus Laptop, TotalValue = 860, Quantity = 2 } { ProductId = def45678, Product = Karcher Hose Set, TotalValue = 66, Quantity = 3 }
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 ステージを追加して、$unwind
配列のエントリを個々のドキュメントに分割します。products
unwindStage := bson.D{{Key: "$unwind", Value: bson.D{ {Key: "path", Value: "$products"}, }}}
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、products.price
の値が より大きい製品に一致する ステージを追加します。15
matchStage := bson.D{{Key: "$match", Value: bson.D{ {Key: "products.price", Value: bson.D{{Key: "$gt", Value: 15}}}, }}}
製品の種類ごとにグループ化するためのグループ ステージを追加します。
$group
フィールドの値で注文ドキュメントを収集するために、prod_id
ステージを追加します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
product
: 製品名total_value
: 製品の全売上の合計値quantity
: 製品の注文数
groupStage := bson.D{{Key: "$group", Value: bson.D{ {Key: "_id", Value: "$products.prod_id"}, {Key: "product", Value: bson.D{{Key: "$first", Value: "$products.name"}}}, {Key: "total_value", Value: bson.D{{Key: "$sum", Value: "$products.price"}}}, {Key: "quantity", Value: bson.D{{Key: "$sum", Value: 1}}}, }}}
製品IDを表示するには、 セット ステージを追加します。
$set
ステージを追加して、 ステージ中に設定されたproduct_id
フィールドの値から フィールドを再作成します。_id
$group
setStage := bson.D{{Key: "$set", Value: bson.D{ {Key: "product_id", Value: "$_id"}, }}}
不要なフィールドを削除するには、設定されていない ステージを追加します。
最後に、$unset
ステージを追加します。$unset
ステージでは、結果ドキュメントから フィールドが削除されます。_id
unsetStage := bson.D{{Key: "$unset", Value: bson.A{"_id"}}}
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
{"product":"Morphy Richards Food Mixer","total_value":431,"quantity":1,"product_id":"pqr88223"} {"product":"Russell Hobbs Chrome Kettle","total_value":16,"quantity":1,"product_id":"xyz11228"} {"product":"Karcher Hose Set","total_value":66,"quantity":3,"product_id":"def45678"} {"product":"Asus Laptop","total_value":860,"quantity":2,"product_id":"abc12345"}
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 ステージを追加して、$unwind
配列のエントリを個々のドキュメントに分割します。products
pipeline.add(Aggregates.unwind("$products"));
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、products.price
の値が より大きい製品に一致する ステージを追加します。15
pipeline.add(Aggregates.match( Filters.gt("products.price", 15) ));
製品の種類ごとにグループ化するためのグループ ステージを追加します。
$group
フィールドの値で注文ドキュメントを収集するために、prod_id
ステージを追加します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
product
: 製品名total_value
: 製品の全売上の合計値quantity
: 製品の注文数
pipeline.add(Aggregates.group( "$products.prod_id", Accumulators.first("product", "$products.name"), Accumulators.sum("total_value", "$products.price"), Accumulators.sum("quantity", 1) ));
製品IDを表示するには、 セット ステージを追加します。
$set
ステージを追加して、 ステージ中に設定されたproduct_id
フィールドの値から フィールドを再作成します。_id
$group
pipeline.add(Aggregates.set(new Field<>("product_id", "$_id")));
不要なフィールドを削除するには、設定されていない ステージを追加します。
最後に、$unset
ステージを追加します。$unset
ステージでは、結果ドキュメントから フィールドが削除されます。_id
pipeline.add(Aggregates.unset("_id"));
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
{"product": "Asus Laptop", "total_value": 860, "quantity": 2, "product_id": "abc12345"} {"product": "Russell Hobbs Chrome Kettle", "total_value": 16, "quantity": 1, "product_id": "xyz11228"} {"product": "Karcher Hose Set", "total_value": 66, "quantity": 3, "product_id": "def45678"} {"product": "Morphy Richards Food Mixer", "total_value": 431, "quantity": 1, "product_id": "pqr88223"}
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 ステージを追加して、$unwind
配列のエントリを個々のドキュメントに分割します。products
pipeline.add( Aggregates.unwind("\$${Order::products.name}") )
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、products.price
の値が より大きい製品に一致する ステージを追加します。15
pipeline.add( Aggregates.match( Filters.gt("${Order::products.name}.${Product::price.name}", 15) ) )
製品の種類ごとにグループ化するためのグループ ステージを追加します。
$group
フィールドの値で注文ドキュメントを収集するために、prodID
ステージを追加します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
product
: 製品名total_value
: 製品の全売上の合計値quantity
: 製品の注文数
pipeline.add( Aggregates.group( "\$${Order::products.name}.${Product::prodID.name}", Accumulators.first("product", "\$${Order::products.name}.${Product::name.name}"), Accumulators.sum("total_value", "\$${Order::products.name}.${Product::price.name}"), Accumulators.sum("quantity", 1) ) )
製品IDを表示するには、 セット ステージを追加します。
$set
ステージを追加して、 ステージ中に設定されたproduct_id
フィールドの値から フィールドを再作成します。_id
$group
pipeline.add(Aggregates.set(Field("product_id", "\$_id")))
不要なフィールドを削除するには、設定されていない ステージを追加します。
最後に、$unset
ステージを追加します。$unset
ステージでは、結果ドキュメントから フィールドが削除されます。_id
pipeline.add(Aggregates.unset("_id"))
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
Document{{product=Russell Hobbs Chrome Kettle, total_value=16, quantity=1, product_id=xyz11228}} Document{{product=Karcher Hose Set, total_value=66, quantity=3, product_id=def45678}} Document{{product=Morphy Richards Food Mixer, total_value=431, quantity=1, product_id=pqr88223}} Document{{product=Asus Laptop, total_value=860, quantity=2, product_id=abc12345}}
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 ステージを追加して、$unwind
配列のエントリを個々のドキュメントに分割します。products
pipeline.push({ $unwind: { path: "$products", }, });
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、products.price
の値が より大きい製品に一致する ステージを追加します。15
pipeline.push({ $match: { "products.price": { $gt: 15, }, }, });
製品の種類ごとにグループ化するためのグループ ステージを追加します。
$group
フィールドの値で注文ドキュメントを収集するために、prod_id
ステージを追加します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
product
: 製品名total_value
: 製品の全売上の合計値quantity
: 製品の注文数
pipeline.push({ $group: { _id: "$products.prod_id", product: { $first: "$products.name" }, total_value: { $sum: "$products.price" }, quantity: { $sum: 1 }, }, });
製品IDを表示するには、 セット ステージを追加します。
$set
ステージを追加して、 ステージ中に設定されたproduct_id
フィールドの値から フィールドを再作成します。_id
$group
pipeline.push({ $set: { product_id: "$_id", }, });
不要なフィールドを削除するには、設定されていない ステージを追加します。
最後に、$unset
ステージを追加します。$unset
ステージでは、結果ドキュメントから フィールドが削除されます。_id
pipeline.push({ $unset: ["_id"] });
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
{ product: 'Asus Laptop', total_value: 860, quantity: 2, product_id: 'abc12345' } { product: 'Morphy Richards Food Mixer', total_value: 431, quantity: 1, product_id: 'pqr88223' } { product: 'Russell Hobbs Chrome Kettle', total_value: 16, quantity: 1, product_id: 'xyz11228' } { product: 'Karcher Hose Set', total_value: 66, quantity: 3, product_id: 'def45678' }
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 ステージを追加して、$unwind
配列のエントリを個々のドキュメントに分割します。products
Stage::unwind( path: Expression::arrayFieldPath('products') ),
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、products.price
の値が より大きい製品に一致する ステージを追加します。15
Stage::match( ['products.price' => Query::gt(15)] ),
製品の種類ごとにグループ化するためのグループ ステージを追加します。
Pipeline
$group
prod_id
インスタンスの外部に、ファクトリー関数で ステージを作成し、 フィールドの値で注文ドキュメントを収集します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
product
: 製品名total_value
: 製品の全売上の合計値quantity
: 製品の注文数
function groupByProductStage() { return Stage::group( _id: Expression::stringFieldPath('products.prod_id'), product: Accumulator::first( Expression::stringFieldPath('products.name') ), total_value: Accumulator::sum( Expression::numberFieldPath('products.price'), ), quantity: Accumulator::sum(1) ); }
次に、Pipeline
インスタンスで、groupByProductStage()
関数を呼び出します。
groupByProductStage(),
製品IDを表示するには、 セット ステージを追加します。
$set
ステージを追加して、 ステージ中に設定されたproduct_id
フィールドの値から フィールドを再作成します。_id
$group
Stage::set(product_id: Expression::stringFieldPath('_id')),
不要なフィールドを削除するには、設定されていない ステージを追加します。
最後に、$unset
ステージを追加します。$unset
ステージでは、結果ドキュメントから フィールドが削除されます。_id
Stage::unset('_id')
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
{ "product": "Russell Hobbs Chrome Kettle", "total_value": 16, "quantity": 1, "product_id": "xyz11228" } { "product": "Asus Laptop", "total_value": 860, "quantity": 2, "product_id": "abc12345" } { "product": "Karcher Hose Set", "total_value": 66, "quantity": 3, "product_id": "def45678" } { "product": "Morphy Richards Food Mixer", "total_value": 431, "quantity": 1, "product_id": "pqr88223" }
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 ステージを追加して、$unwind
配列のエントリを個々のドキュメントに分割します。products
pipeline.append({"$unwind": {"path": "$products"}})
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、products.price
の値が より大きい製品に一致する ステージを追加します。15
pipeline.append({"$match": {"products.price": {"$gt": 15}}})
製品の種類ごとにグループ化するためのグループ ステージを追加します。
$group
フィールドの値で注文ドキュメントを収集するために、prod_id
ステージを追加します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
product
: 製品名total_value
: 製品の全売上の合計値quantity
: 製品の注文数
pipeline.append( { "$group": { "_id": "$products.prod_id", "product": {"$first": "$products.name"}, "total_value": {"$sum": "$products.price"}, "quantity": {"$sum": 1}, } } )
製品IDを表示するには、 セット ステージを追加します。
$set
ステージを追加して、 ステージ中に設定されたproduct_id
フィールドの値から フィールドを再作成します。_id
$group
pipeline.append({"$set": {"product_id": "$_id"}})
不要なフィールドを削除するには、設定されていない ステージを追加します。
最後に、$unset
ステージを追加します。$unset
ステージでは、結果ドキュメントから フィールドが削除されます。_id
pipeline.append({"$unset": ["_id"]})
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
{'product': 'Morphy Richards Food Mixer', 'total_value': 431, 'quantity': 1, 'product_id': 'pqr88223'} {'product': 'Asus Laptop', 'total_value': 860, 'quantity': 2, 'product_id': 'abc12345'} {'product': 'Russell Hobbs Chrome Kettle', 'total_value': 16, 'quantity': 1, 'product_id': 'xyz11228'} {'product': 'Karcher Hose Set', 'total_value': 66, 'quantity': 3, 'product_id': 'def45678'}
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 ステージを追加して、$unwind
配列のエントリを個々のドキュメントに分割します。products
{ "$unwind": { path: "$products", }, },
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、products.price
の値が より大きい製品に一致する ステージを追加します。15
{ "$match": { "products.price": { "$gt": 15, }, }, },
製品の種類ごとにグループ化するためのグループ ステージを追加します。
$group
フィールドの値で注文ドキュメントを収集するために、prod_id
ステージを追加します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
product
: 製品名total_value
: 製品の全売上の合計値quantity
: 製品の注文数
{ "$group": { _id: "$products.prod_id", product: { "$first": "$products.name" }, total_value: { "$sum": "$products.price" }, quantity: { "$sum": 1 }, }, },
製品IDを表示するには、 セット ステージを追加します。
$set
ステージを追加して、 ステージ中に設定されたproduct_id
フィールドの値から フィールドを再作成します。_id
$group
{ "$set": { product_id: "$_id", }, },
不要なフィールドを削除するには、設定されていない ステージを追加します。
最後に、$unset
ステージを追加します。$unset
ステージでは、結果ドキュメントから フィールドが削除されます。_id
{ "$unset": ["_id"] },
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
{"product"=>"Asus Laptop", "total_value"=>860, "quantity"=>2, "product_id"=>"abc12345"} {"product"=>"Russell Hobbs Chrome Kettle", "total_value"=>16, "quantity"=>1, "product_id"=>"xyz11228"} {"product"=>"Karcher Hose Set", "total_value"=>66, "quantity"=>3, "product_id"=>"def45678"} {"product"=>"Morphy Richards Food Mixer", "total_value"=>431, "quantity"=>1, "product_id"=>"pqr88223"}
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 ステージを追加して、$unwind
配列のエントリを個々のドキュメントに分割します。products
pipeline.push(doc! { "$unwind": { "path": "$products" } });
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、products.price
の値が より大きい製品に一致する ステージを追加します。15
pipeline.push(doc! { "$match": { "products.price": { "$gt": 15 } } });
製品の種類ごとにグループ化するためのグループ ステージを追加します。
$group
フィールドの値で注文ドキュメントを収集するために、prod_id
ステージを追加します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
product
: 製品名total_value
: 製品の全売上の合計値quantity
: 製品の注文数
pipeline.push(doc! { "$group": { "_id": "$products.prod_id", "product": { "$first": "$products.name" }, "total_value": { "$sum": "$products.price" }, "quantity": { "$sum": 1 } } });
製品IDを表示するには、 セット ステージを追加します。
$set
ステージを追加して、 ステージ中に設定されたprod_id
フィールドの値から フィールドを再作成します。_id
$group
pipeline.push(doc! { "$set": { "prod_id": "$_id" } });
不要なフィールドを削除するには、設定されていない ステージを追加します。
最後に、$unset
ステージを追加します。$unset
ステージでは、結果ドキュメントから フィールドが削除されます。_id
pipeline.push(doc! { "$unset": ["_id"] });
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
Document({"product": String("Russell Hobbs Chrome Kettle"), "total_value": Int32(16), "quantity": Int32(1), "prod_id": String("xyz11228")}) Document({"product": String("Morphy Richards Food Mixer"), "total_value": Int32(431), "quantity": Int32(1), "prod_id": String("pqr88223")}) Document({"product": String("Karcher Hose Set"), "total_value": Int32(66), "quantity": Int32(3), "prod_id": String("def45678")}) Document({"product": String("Asus Laptop"), "total_value": Int32(860), "quantity": Int32(2), "prod_id": String("abc12345")})
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。
製品注文の配列を解凍するために、 展開ステージを追加します。
まず、 ステージを追加して、$unwind
配列のエントリを個々のドキュメントに分割します。products
Aggregates.unwind("$products"),
$15 を超えるコストの製品に一致するステージを追加します。
$match
次に、products.price
の値が より大きい製品に一致する ステージを追加します。15
Aggregates.filter(Filters.gt("products.price", 15)),
製品の種類ごとにグループ化するためのグループ ステージを追加します。
$group
フィールドの値で注文ドキュメントを収集するために、prod_id
ステージを追加します。このステージでは、結果ドキュメントに次のフィールドを作成する集計操作を追加します。
product
: 製品名total_value
: 製品の全売上の合計値quantity
: 製品の注文数
Aggregates.group( "$products.prod_id", Accumulators.first("product", "$products.name"), Accumulators.sum("total_value", "$products.price"), Accumulators.sum("quantity", 1) ),
製品IDを表示するには、 セット ステージを追加します。
$set
ステージを追加して、 ステージ中に設定されたproduct_id
フィールドの値から フィールドを再作成します。_id
$group
Aggregates.set(Field("product_id", "$_id")),
不要なフィールドを削除するには、設定されていない ステージを追加します。
最後に、$unset
ステージを追加します。$unset
ステージでは、結果ドキュメントから フィールドが削除されます。_id
Aggregates.unset("_id")
集計結果の解釈
この集計により、2020 年からのカスタマーの注文に関する次の概要が返されます。
{"product": "Morphy Richards Food Mixer", "total_value": 431, "quantity": 1, "product_id": "pqr88223"} {"product": "Karcher Hose Set", "total_value": 66, "quantity": 3, "product_id": "def45678"} {"product": "Russell Hobbs Chrome Kettle", "total_value": 16, "quantity": 1, "product_id": "xyz11228"} {"product": "Asus Laptop", "total_value": 860, "quantity": 2, "product_id": "abc12345"}
結果ドキュメントには、コストが 15 ドルを超える製品の合計値と注文数に関する詳細が含まれます。