Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / /

Realizar junções um a um

Este tutorial ilustra como construir um pipeline de agregação , executar a agregação em uma coleção e exibir os resultados usando a linguagem de sua escolha.

Este tutorial demonstra como combinar dados de uma collection que descreve informações do produto com outra collection que descreve pedidos de cliente . Os resultados mostram uma lista de todos os pedidos feitos em 2020 e incluem os detalhes do produto associados a cada pedido.

Essa aggregation realiza uma junção de um para um. Uma união um a um ocorre quando um documento em uma collection tem um valor de campo que corresponde a um único documento em outra collection que tem o mesmo valor de campo. A agregação corresponde a esses documentos no valor do campo e combina informações de ambas as fontes em um resultado.

Observação

Uma união de um para um não exige que os documentos tenham um relacionamento de um para um. Para saber mais sobre esse relacionamento de dados, consulte o verbete do Wikipedia sobre Um-para-um (modelo de dados).


➤ Use o menu suspenso Selecione seu idioma no canto superior direito para definir o idioma dos exemplos a seguir ou selecione o shell do MongoDB.


Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Para criar as collections orders e products, use o método insertMany():

db.orders.deleteMany({})
db.orders.insertMany( [
{
customer_id: "elise_smith@myemail.com",
orderdate: new Date("2020-05-30T08:35:52Z"),
product_id: "a1b2c3d4",
value: 431.43
},
{
customer_id: "tj@wheresmyemail.com",
orderdate: new Date("2019-05-28T19:13:32Z"),
product_id: "z9y8x7w6",
value: 5.01
},
{
customer_id: "oranieri@warmmail.com",
orderdate: new Date("2020-01-01T08:25:37Z"),
product_id: "ff11gg22hh33",
value: 63.13
},
{
customer_id: "jjones@tepidmail.com",
orderdate: new Date("2020-12-26T08:55:46Z"),
product_id: "a1b2c3d4",
value: 429.65
}
] )
db.products.deleteMany({})
db.products.insertMany( [
{
p_id: "a1b2c3d4",
name: "Asus Laptop",
category: "ELECTRONICS",
description: "Good value laptop for students"
},
{
p_id: "z9y8x7w6",
name: "The Day Of The Triffids",
category: "BOOKS",
description: "Classic post-apocalyptic novel"
},
{
p_id: "ff11gg22hh33",
name: "Morphy Richardds Food Mixer",
category: "KITCHENWARE",
description: "Luxury mixer turning good cakes into great"
},
{
p_id: "pqr678st",
name: "Karcher Hose Set",
category: "GARDEN",
description: "Hose + nosels + winder for tidy storage"
}
] )

Antes de começar a seguir este tutorial de agregação , você deve configurar um novo aplicativo C. Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar o driver e se conectar ao MongoDB, consulte o guia Introdução ao driver C.

Para saber mais sobre como realizar agregações no C Driver, consulte o Guia de agregação.

Depois de instalar o driver, crie um arquivo chamado agg-tutorial.c. Cole o código abaixo neste arquivo para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

#include <stdio.h>
#include <bson/bson.h>
#include <mongoc/mongoc.h>
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;
}

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão do seu sistema, consulte a etapa Criar uma cadeia de conexão do guia de Introdução C.

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

char *uri = "mongodb+srv://mongodb-example:27017";

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

mongoc_collection_t *orders = mongoc_client_get_collection(client, "agg_tutorials_db", "orders");
mongoc_collection_t *products = mongoc_client_get_collection(client, "agg_tutorials_db", "products");
{
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);
}
if (!mongoc_collection_delete_many(products, filter, NULL, NULL, &error))
{
fprintf(stderr, "Delete error: %s\n", error.message);
}
bson_destroy(filter);
}
{
size_t num_docs = 4;
bson_t *order_docs[num_docs];
order_docs[0] = BCON_NEW(
"customer_id", BCON_UTF8("elise_smith@myemail.com"),
"orderdate", BCON_DATE_TIME(1590822952000UL), // 2020-05-30T08:35:52Z
"product_id", BCON_UTF8("a1b2c3d4"),
"value", BCON_DOUBLE(431.43));
order_docs[1] = BCON_NEW(
"customer_id", BCON_UTF8("tj@wheresmyemail.com"),
"orderdate", BCON_DATE_TIME(1559063612000UL), // 2019-05-28T19:13:32Z
"product_id", BCON_UTF8("z9y8x7w6"),
"value", BCON_DOUBLE(5.01));
order_docs[2] = BCON_NEW(
"customer_id", BCON_UTF8("oranieri@warmmail.com"),
"orderdate", BCON_DATE_TIME(1577869537000UL), // 2020-01-01T08:25:37Z
"product_id", BCON_UTF8("ff11gg22hh33"),
"value", BCON_DOUBLE(63.13));
order_docs[3] = BCON_NEW(
"customer_id", BCON_UTF8("jjones@tepidmail.com"),
"orderdate", BCON_DATE_TIME(1608976546000UL), // 2020-12-26T08:55:46Z
"product_id", BCON_UTF8("a1b2c3d4"),
"value", BCON_DOUBLE(429.65));
bson_error_t error;
if (!mongoc_collection_insert_many(orders, (const bson_t **)order_docs, num_docs, NULL, NULL, &error))
{
fprintf(stderr, "Insert error: %s\n", error.message);
}
for (int i = 0; i < num_docs; i++)
{
bson_destroy(order_docs[i]);
}
}
{
size_t num_docs = 4;
bson_t *product_docs[num_docs];
product_docs[0] = BCON_NEW(
"id", BCON_UTF8("a1b2c3d4"),
"name", BCON_UTF8("Asus Laptop"),
"category", BCON_UTF8("ELECTRONICS"),
"description", BCON_UTF8("Good value laptop for students"));
product_docs[1] = BCON_NEW(
"id", BCON_UTF8("z9y8x7w6"),
"name", BCON_UTF8("The Day Of The Triffids"),
"category", BCON_UTF8("BOOKS"),
"description", BCON_UTF8("Classic post-apocalyptic novel"));
product_docs[2] = BCON_NEW(
"id", BCON_UTF8("ff11gg22hh33"),
"name", BCON_UTF8("Morphy Richardds Food Mixer"),
"category", BCON_UTF8("KITCHENWARE"),
"description", BCON_UTF8("Luxury mixer turning good cakes into great"));
product_docs[3] = BCON_NEW(
"id", BCON_UTF8("pqr678st"),
"name", BCON_UTF8("Karcher Hose Set"),
"category", BCON_UTF8("GARDEN"),
"description", BCON_UTF8("Hose + nosels + winder for tidy storage"));
bson_error_t error;
if (!mongoc_collection_insert_many(products, (const bson_t **)product_docs, num_docs, NULL, NULL, &error))
{
fprintf(stderr, "Insert error: %s\n", error.message);
}
for (int i = 0; i < num_docs; i++)
{
bson_destroy(product_docs[i]);
}
}

Antes de começar a seguir um tutorial de agregação , você deve configurar um novo aplicativo C++ . Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar o driver e se conectar ao MongoDB, consulte o tutorial Introdução ao C++.

Para saber mais sobre como usar o driver C++ , consulte a documentação da API.

Para saber mais sobre como executar agregações no driver C++ , consulte o guia Agregação.

Depois de instalar o driver, crie um arquivo chamado agg-tutorial.cpp. Cole o código abaixo neste arquivo para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

#include <iostream>
#include <bsoncxx/builder/basic/document.hpp>
#include <bsoncxx/builder/basic/kvp.hpp>
#include <bsoncxx/json.hpp>
#include <mongocxx/client.hpp>
#include <mongocxx/instance.hpp>
#include <mongocxx/pipeline.hpp>
#include <mongocxx/uri.hpp>
#include <chrono>
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;
}
}

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão do seu sistema, consulte a etapa Criar uma cadeia de conexão do tutorial de Introdução do C++.

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

mongocxx::uri uri{"mongodb+srv://mongodb-example:27017"};

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

auto orders = db["orders"];
auto products = db["products"];
std::vector<bsoncxx::document::value> order_docs = {
bsoncxx::from_json(R"({
"customer_id": "elise_smith@myemail.com",
"orderdate": {"$date": 1590821752000},
"product_id": "a1b2c3d4",
"value": 431.43
})"),
bsoncxx::from_json(R"({
"customer_id": "tj@wheresmyemail.com",
"orderdate": {"$date": 1559062412},
"product_id": "z9y8x7w6",
"value": 5.01
})"),
bsoncxx::from_json(R"({
"customer_id": "oranieri@warmmail.com",
"orderdate": {"$date": 1577861137},
"product_id": "ff11gg22hh33",
"value": 63.13
})"),
bsoncxx::from_json(R"({
"customer_id": "jjones@tepidmail.com",
"orderdate": {"$date": 1608972946000},
"product_id": "a1b2c3d4",
"value": 429.65
})")
};
orders.insert_many(order_docs); // Might throw an exception
std::vector<bsoncxx::document::value> product_docs = {
bsoncxx::from_json(R"({
"id": "a1b2c3d4",
"name": "Asus Laptop",
"category": "ELECTRONICS",
"description": "Good value laptop for students"
})"),
bsoncxx::from_json(R"({
"id": "z9y8x7w6",
"name": "The Day Of The Triffids",
"category": "BOOKS",
"description": "Classic post-apocalyptic novel"
})"),
bsoncxx::from_json(R"({
"id": "ff11gg22hh33",
"name": "Morphy Richardds Food Mixer",
"category": "KITCHENWARE",
"description": "Luxury mixer turning good cakes into great"
})"),
bsoncxx::from_json(R"({
"id": "pqr678st",
"name": "Karcher Hose Set",
"category": "GARDEN",
"description": "Hose + nosels + winder for tidy storage"
})")
};
products.insert_many(product_docs); // Might throw an exception

Antes de começar a seguir este tutorial de agregação , você deve configurar um novo aplicativo C#/ .NET . Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar o driver e se conectar ao MongoDB, consulte o guia de início rápido do driver C#/ .NET.

Para saber mais sobre como executar agregações no driver C#/ .NET, consulte o guia Agregação.

Depois de instalar o driver, cole o seguinte código no seu arquivo Program.cs para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

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);
}

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão do seu sistema, consulte a etapa Configurar um cluster de camada grátis no Atlas do guia de Início Rápido de C#.

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

var uri = "mongodb+srv://mongodb-example:27017";

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo ProductId que existe em documentos em ambas as collections.

Primeiro, crie classes C# para modelar os dados nas collections orders e products:

public class Order
{
[BsonId]
public ObjectId Id { get; set; }
public string CustomerId { get; set; }
public DateTime OrderDate { get; set; }
public string ProductId { get; set; }
public double Value { get; set; }
}
public class Product
{
[BsonId]
public string Id { get; set; }
public string Name { get; set; }
public string Category { get; set; }
public string Description { get; set; }
}

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

var orders = aggDB.GetCollection<Order>("orders");
var products = aggDB.GetCollection<Product>("products");
orders.DeleteMany(Builders<Order>.Filter.Empty);
products.DeleteMany(Builders<Product>.Filter.Empty);
orders.InsertMany(new List<Order>
{
new Order
{
CustomerId = "elise_smith@myemail.com",
OrderDate = DateTime.Parse("2020-05-30T08:35:52Z"),
ProductId = "a1b2c3d4",
Value = 431.43
},
new Order
{
CustomerId = "tj@wheresmyemail.com",
OrderDate = DateTime.Parse("2019-05-28T19:13:32Z"),
ProductId = "z9y8x7w6",
Value = 5.01
},
new Order
{
CustomerId = "oranieri@warmmail.com",
OrderDate = DateTime.Parse("2020-01-01T08:25:37Z"),
ProductId = "ff11gg22hh33",
Value = 63.13
},
new Order
{
CustomerId = "jjones@tepidmail.com",
OrderDate = DateTime.Parse("2020-12-26T08:55:46Z"),
ProductId = "a1b2c3d4",
Value = 429.65
}
});
products.InsertMany(new List<Product>
{
new Product
{
Id = "a1b2c3d4",
Name = "Asus Laptop",
Category = "ELECTRONICS",
Description = "Good value laptop for students"
},
new Product
{
Id = "z9y8x7w6",
Name = "The Day Of The Triffids",
Category = "BOOKS",
Description = "Classic post-apocalyptic novel"
},
new Product
{
Id = "ff11gg22hh33",
Name = "Morphy Richardds Food Mixer",
Category = "KITCHENWARE",
Description = "Luxury mixer turning good cakes into great"
},
new Product
{
Id = "pqr678st",
Name = "Karcher Hose Set",
Category = "GARDEN",
Description = "Hose + nosels + winder for tidy storage"
}
});

Antes de começar a seguir este tutorial de agregação , você deve configurar um novo aplicativo Go. Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar o driver e se conectar ao MongoDB, consulte o guia Início Rápido do Driver Go.

Para saber mais sobre como executar agregações no Go Driver, consulte o guia Agregação.

Depois de instalar o driver, crie um arquivo chamado agg_tutorial.go. Cole o código abaixo neste arquivo para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

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))
}
}

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão do seu sistema, consulte a etapa Criar um cluster MongoDB do guia Go Quick Start.

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

const uri = "mongodb+srv://mongodb-example:27017";

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Primeiro, crie estruturas Go para modelar os dados nas collections orders e products:

type Order struct {
CustomerID string `bson:"customer_id"`
OrderDate bson.DateTime `bson:"orderdate"`
ProductID string `bson:"product_id"`
Value float32 `bson:"value"`
}
type Product struct {
ID string `bson:"id"`
Name string `bson:"name"`
Category string `bson:"category"`
Description string `bson:"description"`
}

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

orders := aggDB.Collection("orders")
products := aggDB.Collection("products")
orders.DeleteMany(context.TODO(), bson.D{})
products.DeleteMany(context.TODO(), bson.D{})
_, err = orders.InsertMany(context.TODO(), []interface{}{
Order{
CustomerID: "elise_smith@myemail.com",
OrderDate: bson.NewDateTimeFromTime(time.Date(2020, 5, 30, 8, 35, 52, 0, time.UTC)),
ProductID: "a1b2c3d4",
Value: 431.43,
},
Order{
CustomerID: "tj@wheresmyemail.com",
OrderDate: bson.NewDateTimeFromTime(time.Date(2019, 5, 28, 19, 13, 32, 0, time.UTC)),
ProductID: "z9y8x7w6",
Value: 5.01,
},
Order{
CustomerID: "oranieri@warmmail.com",
OrderDate: bson.NewDateTimeFromTime(time.Date(2020, 01, 01, 8, 25, 37, 0, time.UTC)),
ProductID: "ff11gg22hh33",
Value: 63.13,
},
Order{
CustomerID: "jjones@tepidmail.com",
OrderDate: bson.NewDateTimeFromTime(time.Date(2020, 12, 26, 8, 55, 46, 0, time.UTC)),
ProductID: "a1b2c3d4",
Value: 429.65,
},
})
if err != nil {
log.Fatal(err)
}
_, err = products.InsertMany(context.TODO(), []interface{}{
Product{
ID: "a1b2c3d4",
Name: "Asus Laptop",
Category: "ELECTRONICS",
Description: "Good value laptop for students",
},
Product{
ID: "z9y8x7w6",
Name: "The Day Of The Triffids",
Category: "BOOKS",
Description: "Classic post-apocalyptic novel",
},
Product{
ID: "ff11gg22hh33",
Name: "Morphy Richardds Food Mixer",
Category: "KITCHENWARE",
Description: "Luxury mixer turning good cakes into great",
},
Product{
ID: "pqr678st",
Name: "Karcher Hose Set",
Category: "GARDEN",
Description: "Hose + nosels + winder for tidy storage",
},
})
if err != nil {
log.Fatal(err)
}

Antes de começar a seguir um tutorial de agregação , você deve configurar um novo aplicativo Java . Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar o driver e se conectar ao MongoDB, consulte o guia Introdução ao driver Java.

Para saber mais sobre como realizar agregações no Driver Java Sync, consulte o guia Agregação.

Depois de instalar o driver, crie um arquivo chamado AggTutorial.java. Cole o código abaixo neste arquivo para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

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());
}
}
}
}

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão do seu sistema, consulte a etapa Criar uma connection string do guia Início Rápido do Java Sync.

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

String uri = "mongodb+srv://mongodb-example:27017";

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

MongoCollection<Document> orders = aggDB.getCollection("orders");
MongoCollection<Document> products = aggDB.getCollection("products");
orders.deleteMany(Filters.empty());
products.deleteMany(Filters.empty());
orders.insertMany(
Arrays.asList(
new Document("customer_id", "elise_smith@myemail.com")
.append("orderdate", LocalDateTime.parse("2020-05-30T08:35:52"))
.append("product_id", "a1b2c3d4")
.append("value", 431.43),
new Document("customer_id", "tj@wheresmyemail.com")
.append("orderdate", LocalDateTime.parse("2019-05-28T19:13:32"))
.append("product_id", "z9y8x7w6")
.append("value", 5.01),
new Document("customer_id", "oranieri@warmmail.com")
.append("orderdate", LocalDateTime.parse("2020-01-01T08:25:37"))
.append("product_id", "ff11gg22hh33")
.append("value", 63.13),
new Document("customer_id", "jjones@tepidmail.com")
.append("orderdate", LocalDateTime.parse("2020-12-26T08:55:46"))
.append("product_id", "a1b2c3d4")
.append("value", 429.65)
)
);
products.insertMany(
Arrays.asList(
new Document("id", "a1b2c3d4")
.append("name", "Asus Laptop")
.append("category", "ELECTRONICS")
.append("description", "Good value laptop for students"),
new Document("id", "z9y8x7w6")
.append("name", "The Day Of The Triffids")
.append("category", "BOOKS")
.append("description", "Classic post-apocalyptic novel"),
new Document("id", "ff11gg22hh33")
.append("name", "Morphy Richardds Food Mixer")
.append("category", "KITCHENWARE")
.append("description", "Luxury mixer turning good cakes into great"),
new Document("id", "pqr678st")
.append("name", "Karcher Hose Set")
.append("category", "GARDEN")
.append("description", "Hose + nosels + winder for tidy storage")
)
);

Antes de começar a seguir um tutorial de agregação , você deve configurar um novo aplicativo Kotlin . Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar o driver e se conectar ao MongoDB, consulte o guia Início rápido do driver Kotlin.

Para saber mais sobre como executar agregações no Driver Kotlin, consulte o guia Agregação.

Além do driver, você também deve adicionar as seguintes dependências ao seu arquivo build.gradle.kts e recarregar seu projeto:

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")
}

Depois de instalar o driver, crie um arquivo chamado AggTutorial.kt. Cole o código abaixo neste arquivo para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

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.
@Serializable
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) }
}
}

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão do seu sistema, consulte a etapa Conectar-se ao cluster do guia de início rápido do driver Kotlin.

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

val uri = "mongodb+srv://mongodb-example:27017"

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Primeiro, crie classes de dados Kotlin para modelar os dados nas coleções orders e products:

@Serializable
data class Order(
val customerID: String,
@Contextual val orderDate: LocalDateTime,
val productID: String,
val value: Double
)
@Serializable
data class Product(
val ID: String,
val name: String,
val category: String,
val description: String
)

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

val orders = aggDB.getCollection<Order>("orders")
val products = aggDB.getCollection<Product>("products")
orders.deleteMany(Filters.empty());
products.deleteMany(Filters.empty());
orders.insertMany(
listOf(
Order("elise_smith@myemail.com", LocalDateTime.parse("2020-05-30T08:35:52"), "a1b2c3d4", 431.43),
Order("tj@wheresmyemail.com", LocalDateTime.parse("2019-05-28T19:13:32"), "z9y8x7w6", 5.01),
Order("oranieri@warmmail.com", LocalDateTime.parse("2020-01-01T08:25:37"), "ff11gg22hh33", 63.13),
Order("jjones@tepidmail.com", LocalDateTime.parse("2020-12-26T08:55:46"), "a1b2c3d4", 429.65)
)
)
products.insertMany(
listOf(
Product("a1b2c3d4", "Asus Laptop", "ELECTRONICS", "Good value laptop for students"),
Product("z9y8x7w6", "The Day Of The Triffids", "BOOKS", "Classic post-apocalyptic novel"),
Product(
"ff11gg22hh33",
"Morphy Richardds Food Mixer",
"KITCHENWARE",
"Luxury mixer turning good cakes into great"
),
Product("pqr678st", "Karcher Hose Set", "GARDEN", "Hose + nosels + winder for tidy storage")
)
)

Antes de começar a seguir este tutorial de agregação , você deve configurar um novo aplicativo Node.js Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar o driver e se conectar ao MongoDB, consulte o guia de início rápido do driver do Node.js

Para saber mais sobre como realizar agregações no Driver Node.js, consulte o Guia de agregação.

Depois de instalar o driver, crie um arquivo chamado agg_tutorial.js. Cole o código abaixo neste arquivo para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

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);

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão do seu sistema, consulte a etapa Criar uma connection string do guia de Início Rápido do Node.js

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

const uri = "mongodb+srv://mongodb-example:27017";

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

const orders = aggDB.collection("orders");
const products = aggDB.collection("products");
await orders.deleteMany({});
await products.deleteMany({});
await orders.insertMany([
{
customer_id: "elise_smith@myemail.com",
orderdate: new Date("2020-05-30T08:35:52Z"),
product_id: "a1b2c3d4",
value: 431.43,
},
{
customer_id: "tj@wheresmyemail.com",
orderdate: new Date("2019-05-28T19:13:32Z"),
product_id: "z9y8x7w6",
value: 5.01,
},
{
customer_id: "oranieri@warmmail.com",
orderdate: new Date("2020-01-01T08:25:37Z"),
product_id: "ff11gg22hh33",
value: 63.13,
},
{
customer_id: "jjones@tepidmail.com",
orderdate: new Date("2020-12-26T08:55:46Z"),
product_id: "a1b2c3d4",
value: 429.65,
},
]);
await products.insertMany([
{
id: "a1b2c3d4",
name: "Asus Laptop",
category: "ELECTRONICS",
description: "Good value laptop for students",
},
{
id: "z9y8x7w6",
name: "The Day Of The Triffids",
category: "BOOKS",
description: "Classic post-apocalyptic novel",
},
{
id: "ff11gg22hh33",
name: "Morphy Richardds Food Mixer",
category: "KITCHENWARE",
description: "Luxury mixer turning good cakes into great",
},
{
id: "pqr678st",
name: "Karcher Hose Set",
category: "GARDEN",
description: "Hose + nosels + winder for tidy storage",
},
]);

Antes de começar a seguir este tutorial de agregação , você deve configurar um novo aplicativo PHP. Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar a biblioteca PHP e se conectar ao MongoDB, consulte o tutorial Introdução à biblioteca PHP.

Para saber mais sobre como realizar agregações na biblioteca PHP, consulte o Guia de agregação.

Depois de instalar a biblioteca, crie um arquivo chamado agg_tutorial.php. Cole o código abaixo neste arquivo para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

<?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;
}

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão de seu sistema, consulte a etapa Criar uma connection string do tutorial de Introdução à biblioteca PHP.

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

$uri = 'mongodb+srv://mongodb-example:27017';

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

$orders = $client->agg_tutorials_db->orders;
$products = $client->agg_tutorials_db->products;
$orders->deleteMany([]);
$products->deleteMany([]);
$orders->insertMany(
[
[
'customer_id' => 'elise_smith@myemail.com',
'orderdate' => new UTCDateTime(new DateTimeImmutable('2020-05-30T08:35:52')),
'product_id' => 'a1b2c3d4',
'value' => 431.43
],
[
'customer_id' => 'tj@wheresmyemail.com',
'orderdate' => new UTCDateTime(new DateTimeImmutable('2019-05-28T19:13:32')),
'product_id' => 'z9y8x7w6',
'value' => 5.01
],
[
'customer_id' => 'oranieri@warmmail.com',
'orderdate' => new UTCDateTime(new DateTimeImmutable('2020-01-01T08:25:37')),
'product_id' => 'ff11gg22hh33',
'value' => 63.13,
],
[
'customer_id' => 'jjones@tepidmail.com',
'orderdate' => new UTCDateTime(new DateTimeImmutable('2020-12-26T08:55:46')),
'product_id' => 'a1b2c3d4',
'value' => 429.65
],
]
);
$products->insertMany(
[
[
'id' => 'a1b2c3d4',
'name' => 'Asus Laptop',
'category' => 'ELECTRONICS',
'description' => 'Good value laptop for students',
],
[
'id' => 'z9y8x7w6',
'name' => 'The Day Of The Triffids',
'category' => 'BOOKS',
'description' => 'Classic post-apocalyptic novel',
],
[
'id' => 'ff11gg22hh33',
'name' => 'Morphy Richardds Food Mixer',
'category' => 'KITCHENWARE',
'description' => 'Luxury mixer turning good cakes into great',
],
[
'id' => 'pqr678st',
'name' => 'Karcher Hose Set',
'category' => 'GARDEN',
'description' => 'Hose + nosels + winder for tidy storage',
],
]
);

Antes de começar a seguir este tutorial de agregação , você deve configurar um novo aplicativo Python. Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar o PyMongo e se conectar ao MongoDB, consulte o tutorial Introdução ao PyMongo.

Para saber mais sobre como realizar agregações no PyMongo, consulte o Guia de agregação.

Depois de instalar a biblioteca, crie um arquivo chamado agg_tutorial.py. Cole o código abaixo neste arquivo para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

# 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()

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão de seu sistema, consulte a etapa Criar uma connection string do tutorial de Introdução à biblioteca PHP.

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

uri = "mongodb+srv://mongodb-example:27017"

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

orders_coll = agg_db["orders"]
products_coll = agg_db["products"]
orders_coll.delete_many({})
products_coll.delete_many({})
order_data = [
{
"customer_id": "elise_smith@myemail.com",
"orderdate": datetime(2020, 5, 30, 8, 35, 52),
"product_id": "a1b2c3d4",
"value": 431.43,
},
{
"customer_id": "tj@wheresmyemail.com",
"orderdate": datetime(2019, 5, 28, 19, 13, 32),
"product_id": "z9y8x7w6",
"value": 5.01,
},
{
"customer_id": "oranieri@warmmail.com",
"orderdate": datetime(2020, 1, 1, 8, 25, 37),
"product_id": "ff11gg22hh33",
"value": 63.13,
},
{
"customer_id": "jjones@tepidmail.com",
"orderdate": datetime(2020, 12, 26, 8, 55, 46),
"product_id": "a1b2c3d4",
"value": 429.65,
},
]
orders_coll.insert_many(order_data)
product_data = [
{
"id": "a1b2c3d4",
"name": "Asus Laptop",
"category": "ELECTRONICS",
"description": "Good value laptop for students",
},
{
"id": "z9y8x7w6",
"name": "The Day Of The Triffids",
"category": "BOOKS",
"description": "Classic post-apocalyptic novel",
},
{
"id": "ff11gg22hh33",
"name": "Morphy Richardds Food Mixer",
"category": "KITCHENWARE",
"description": "Luxury mixer turning good cakes into great",
},
{
"id": "pqr678st",
"name": "Karcher Hose Set",
"category": "GARDEN",
"description": "Hose + nosels + winder for tidy storage",
},
]
products_coll.insert_many(product_data)

Antes de começar a seguir este tutorial de agregação , você deve configurar um novo aplicativo Ruby. Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar o Ruby Driver e se conectar ao MongoDB, consulte o guia Introdução ao Ruby Driver.

Para saber mais sobre como realizar agregações no Driver Ruby, consulte o guia Agregação.

Depois de instalar o driver, crie um arquivo chamado agg_tutorial.rb. Cole o código abaixo neste arquivo para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

# 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

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão do seu sistema, consulte a etapa Criar uma connection string do guia de Introdução ao Ruby.

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

uri = "mongodb+srv://mongodb-example:27017"

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

orders = agg_db[:orders]
products = agg_db[:products]
orders.delete_many({})
products.delete_many({})
orders.insert_many(
[
{
customer_id: "elise_smith@myemail.com",
orderdate: DateTime.parse("2020-05-30T08:35:52Z"),
product_id: "a1b2c3d4",
value: 431.43,
},
{
customer_id: "tj@wheresmyemail.com",
orderdate: DateTime.parse("2019-05-28T19:13:32Z"),
product_id: "z9y8x7w6",
value: 5.01,
},
{
customer_id: "oranieri@warmmail.com",
orderdate: DateTime.parse("2020-01-01T08:25:37Z"),
product_id: "ff11gg22hh33",
value: 63.13,
},
{
customer_id: "jjones@tepidmail.com",
orderdate: DateTime.parse("2020-12-26T08:55:46Z"),
product_id: "a1b2c3d4",
value: 429.65,
},
]
)
products.insert_many(
[
{
id: "a1b2c3d4",
name: "Asus Laptop",
category: "ELECTRONICS",
description: "Good value laptop for students",
},
{
id: "z9y8x7w6",
name: "The Day Of The Triffids",
category: "BOOKS",
description: "Classic post-apocalyptic novel",
},
{
id: "ff11gg22hh33",
name: "Morphy Richardds Food Mixer",
category: "KITCHENWARE",
description: "Luxury mixer turning good cakes into great",
},
{
id: "pqr678st",
name: "Karcher Hose Set",
category: "GARDEN",
description: "Hose + nosels + winder for tidy storage",
},
]
)

Antes de começar a seguir este tutorial de agregação , você deve configurar um novo aplicativo Rust. Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar o driver e se conectar ao MongoDB, consulte o guia Início Rápido do Driver Rust.

Para saber mais sobre como realizar agregações no Driver Rust, consulte o guia Agregação.

Depois de instalar o driver, crie um arquivo chamado agg-tutorial.rs. Cole o código abaixo neste arquivo para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

use mongodb::{
bson::{doc, Document},
options::ClientOptions,
Client,
};
use futures::stream::TryStreamExt;
use std::error::Error;
// Define structs.
// #[derive(Debug, Serialize, Deserialize)]
// struct MyStruct { ... }
#[tokio::main]
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(())
}

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão do seu sistema, consulte a etapa Criar uma connection string do guia Rust Quick Start.

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

let uri = "mongodb+srv://mongodb-example:27017";

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Primeiro, crie estruturas Rust para modelar os dados nas collections orders e products:

#[derive(Debug, Serialize, Deserialize)]
struct Order {
customer_id: String,
order_date: DateTime,
product_id: String,
value: f32,
}
#[derive(Debug, Serialize, Deserialize)]
struct Product {
id: String,
name: String,
category: String,
description: String,
}

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

let orders: Collection<Order> = agg_db.collection("orders");
let products: Collection<Product> = agg_db.collection("products");
orders.delete_many(doc! {}).await?;
products.delete_many(doc! {}).await?;
let order_docs = vec![
Order {
customer_id: "elise_smith@myemail.com".to_string(),
order_date: DateTime::builder().year(2020).month(5).day(30).hour(8).minute(35).second(52).build().unwrap(),
product_id: "a1b2c3d4".to_string(),
value: 431.43,
},
Order {
customer_id: "tj@wheresmyemail.com".to_string(),
order_date: DateTime::builder().year(2019).month(5).day(28).hour(19).minute(13).second(32).build().unwrap(),
product_id: "z9y8x7w6".to_string(),
value: 5.01,
},
Order {
customer_id: "oranieri@warmmail.com".to_string(),
order_date: DateTime::builder().year(2020).month(1).day(1).hour(8).minute(25).second(37).build().unwrap(),
product_id: "ff11gg22hh33".to_string(),
value: 63.13,
},
Order {
customer_id: "jjones@tepidmail.com".to_string(),
order_date: DateTime::builder().year(2020).month(12).day(26).hour(8).minute(55).second(46).build().unwrap(),
product_id: "a1b2c3d4".to_string(),
value: 429.65,
},
];
orders.insert_many(order_docs).await?;
let product_docs = vec![
Product {
id: "a1b2c3d4".to_string(),
name: "Asus Laptop".to_string(),
category: "ELECTRONICS".to_string(),
description: "Good value laptop for students".to_string(),
},
Product {
id: "z9y8x7w6".to_string(),
name: "The Day Of The Triffids".to_string(),
category: "BOOKS".to_string(),
description: "Classic post-apocalyptic novel".to_string(),
},
Product {
id: "ff11gg22hh33".to_string(),
name: "Morphy Richardds Food Mixer".to_string(),
category: "KITCHENWARE".to_string(),
description: "Luxury mixer turning good cakes into great".to_string(),
},
Product {
id: "pqr678st".to_string(),
name: "Karcher Hose Set".to_string(),
category: "GARDEN".to_string(),
description: "Hose + nosels + winder for tidy storage".to_string(),
},
];
products.insert_many(product_docs).await?;

Antes de começar a seguir um tutorial de agregação , você deve configurar um novo aplicativo Scala. Você pode usar esse aplicativo para se conectar a um sistema do MongoDB , inserir dados de amostra no MongoDB e executar o pipeline de agregação .

Dica

Para saber como instalar o driver e se conectar ao MongoDB, consulte o guia Introdução ao driver Scala.

Para saber mais sobre como executar agregações no Driver Scala, consulte o Guia de agregação.

Depois de instalar o driver, crie um arquivo chamado AggTutorial.scala. Cole o código abaixo neste arquivo para criar um modelo de aplicativo para os tutoriais de agregação .

Importante

No código a seguir, leia os comentários do código para localizar as seções do código que você deve modificar para o tutorial que está seguindo.

Se você tentar executar o código sem fazer alterações, encontrará um erro de conexão.

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()
}
}

Para cada tutorial, você deve substituir o placeholder da string de conexão pela string de conexão da sua implantação.

Dica

Para saber como localizar a string de conexão do seu sistema, consulte a etapa Criar uma connection string do guia de Introdução do driver Scala.

Por exemplo, se sua string de conexão for "mongodb+srv://mongodb-example:27017", sua atribuição de string de conexão será semelhante à seguinte:

val uri = "mongodb+srv://mongodb-example:27017"

Este exemplo utiliza duas collection:

  • orders: documentos que descrevem pedidos individuais de produtos em uma loja

  • products: documentos que descrevem os produtos que uma loja vende

Um pedido só pode conter um produto. A agregação usa uma união um-para-um para corresponder um documento de pedido ao documento do produto correspondente. A agregação une as collections pelo campo product_id que existe em documentos em ambas as collections.

Para criar as coleções orders e products e inserir os dados de amostra, adicione o seguinte código ao seu aplicação:

val orders = aggDB.getCollection("orders")
val products = aggDB.getCollection("products")
orders.deleteMany(Filters.empty()).subscribe(
_ => {},
e => println("Error: " + e.getMessage),
)
products.deleteMany(Filters.empty()).subscribe(
_ => {},
e => println("Error: " + e.getMessage),
)
val dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss")
orders.insertMany(
Seq(
Document(
"customer_id" -> "elise_smith@myemail.com",
"orderdate" -> dateFormat.parse("2020-05-30T08:35:52"),
"product_id" -> "a1b2c3d4",
"value" -> 431.43
),
Document(
"customer_id" -> "tj@wheresmyemail.com",
"orderdate" -> dateFormat.parse("2019-05-28T19:13:32"),
"product_id" -> "z9y8x7w6",
"value" -> 5.01
),
Document(
"customer_id" -> "oranieri@warmmail.com",
"orderdate" -> dateFormat.parse("2020-01-01T08:25:37"),
"product_id" -> "ff11gg22hh33",
"value" -> 63.13
),
Document(
"customer_id" -> "jjones@tepidmail.com",
"orderdate" -> dateFormat.parse("2020-12-26T08:55:46"),
"product_id" -> "a1b2c3d4",
"value" -> 429.65
)
)
).subscribe(
_ => {},
e => println("Error: " + e.getMessage),
)
products.insertMany(
Seq(
Document(
"id" -> "a1b2c3d4",
"name" -> "Asus Laptop",
"category" -> "ELECTRONICS",
"description" -> "Good value laptop for students"
),
Document(
"id" -> "z9y8x7w6",
"name" -> "The Day Of The Triffids",
"category" -> "BOOKS",
"description" -> "Classic post-apocalyptic novel"
),
Document(
"id" -> "ff11gg22hh33",
"name" -> "Morphy Richardds Food Mixer",
"category" -> "KITCHENWARE",
"description" -> "Luxury mixer turning good cakes into great"
),
Document(
"id" -> "pqr678st",
"name" -> "Karcher Hose Set",
"category" -> "GARDEN",
"description" -> "Hose + nosels + winder for tidy storage"
)
)
).subscribe(
_ => {},
e => println("Error: " + e.getMessage),
)

As etapas a seguir demonstram como criar e executar um pipeline de agregação para unir coleções em um único campo comum.

1
db.orders.aggregate( [
// Stage 1: Match orders that were placed in 2020
{ $match: {
orderdate: {
$gte: new Date("2020-01-01T00:00:00Z"),
$lt: new Date("2021-01-01T00:00:00Z")
}
} },
// Stage 2: Link the collections
{ $lookup: {
from: "products",
localField: "product_id",
foreignField: "p_id",
as: "product_mapping"
} },
// Stage 3: Create new document fields
{ $set: {
product_mapping: { $first: "$product_mapping" }
} },
{ $set: {
product_name: "$product_mapping.name",
product_category: "$product_mapping.category"
} },
// Stage 4: Remove unneeded fields
{ $unset: ["_id", "product_id", "product_mapping"] }
] )

Neste exemplo, o estágio $lookup sempre gera uma array product_mapping que contém um documento. O estágio $set após o estágio $lookup usa $first para extrair o documento da array product_mapping. Se você usar esse pipeline em uma configuração em que o estágio $lookup gera uma array de mais de um documento, considere usar um estágio { $limit: 1 } explícito no estágio $lookup.

Observação

Se não houver um índice de suporte no foreignField, uma operação $lookup que executa uma correspondência de igualdade com uma única união provavelmente terá um desempenho ruim. Para obter mais informações, consulte e Pesquisar considerações de desempenho e criar um índice.

2

Os resultados agregados contêm três documentos. Os documentos representam pedidos de cliente que ocorreram em 2020, com product_name e product_category do produto pedido:

{
customer_id: 'elise_smith@myemail.com',
orderdate: ISODate('2020-05-30T08:35:52.000Z'),
value: 431.43,
product_name: 'Asus Laptop',
product_category: 'ELECTRONICS'
}
{
customer_id: 'oranieri@warmmail.com',
orderdate: ISODate('2020-01-01T08:25:37.000Z'),
value: 63.13,
product_name: 'Morphy Richardds Food Mixer',
product_category: 'KITCHENWARE'
}
{
customer_id: 'jjones@tepidmail.com',
orderdate: ISODate('2020-12-26T08:55:46.000Z'),
value: 429.65,
product_name: 'Asus Laptop',
product_category: 'ELECTRONICS'
}

O resultado consiste em documentos que contêm campos de documentos na coleção orders e a coleção products unidas correspondendo ao campo product_id presente em cada documento original.

1

Adicione um $match estágio que corresponda aos pedidos colocados em 2020:

"{", "$match", "{",
"orderdate", "{",
"$gte", BCON_DATE_TIME(1577836800000UL),
"$lt", BCON_DATE_TIME(1609459200000UL),
"}",
"}", "}",
2

Em seguida, adicione um estágio $lookup. O estágio $lookup une o campo product_id na collection orders ao campo id na collection products:

"{", "$lookup", "{",
"from", BCON_UTF8("products"),
"localField", BCON_UTF8("product_id"),
"foreignField", BCON_UTF8("id"),
"as", BCON_UTF8("product_mapping"),
"}", "}",
3

Em seguida, adicione dois $set estágios ao pipeline.

O primeiro estágio $set define o campo product_mapping como o primeiro elemento no objeto product_mapping criado no estágio $lookup anterior.

O segundo estágio $set cria dois novos campos, product_name e product_category, a partir dos valores no campo de objeto product_mapping :

"{", "$set", "{", "product_mapping", "{", "$first", BCON_UTF8("$product_mapping"), "}", "}", "}",
"{", "$set", "{",
"product_name", BCON_UTF8("$product_mapping.name"),
"product_category", BCON_UTF8("$product_mapping.category"),
"}", "}",

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Finalmente, adicione um estágio $unset. A etapa $unset remove campos desnecessários do documento:

"{", "$unset", "[", BCON_UTF8("_id"), BCON_UTF8("product_id"), BCON_UTF8("product_mapping"), "]", "}",
5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection orders :

mongoc_cursor_t *results =
mongoc_collection_aggregate(orders, MONGOC_QUERY_NONE, pipeline, NULL, NULL);
bson_destroy(pipeline);

Certifique-se de limpar os recursos de coleta adicionando a seguinte linha às declarações de limpeza:

mongoc_collection_destroy(orders);
mongoc_collection_destroy(products);

Por fim, execute os seguintes comandos em seu shell para gerar e executar o executável:

gcc -o aggc agg-tutorial.c $(pkg-config --libs --cflags libmongoc-1.0)
./aggc

Dica

Se você encontrar erros de conexão ao executar os comandos anteriores em uma chamada, poderá executá-los separadamente.

6

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o product_name e product_category do produto pedido:

{ "customer_id" : "elise_smith@myemail.com", "orderdate" : { "$date" : { "$numberLong" : "1590822952000" } }, "value" : { "$numberDouble" : "431.43000000000000682" }, "product_name" : "Asus Laptop", "product_category" : "ELECTRONICS" }
{ "customer_id" : "oranieri@warmmail.com", "orderdate" : { "$date" : { "$numberLong" : "1577869537000" } }, "value" : { "$numberDouble" : "63.130000000000002558" }, "product_name" : "Morphy Richardds Food Mixer", "product_category" : "KITCHENWARE" }
{ "customer_id" : "jjones@tepidmail.com", "orderdate" : { "$date" : { "$numberLong" : "1608976546000" } }, "value" : { "$numberDouble" : "429.64999999999997726" }, "product_name" : "Asus Laptop", "product_category" : "ELECTRONICS" }

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo product_id presente em cada documento original.

1

Adicione um $match estágio que corresponda aos pedidos colocados em 2020:

pipeline.match(bsoncxx::from_json(R"({
"orderdate": {
"$gte": {"$date": 1577836800},
"$lt": {"$date": 1609459200000}
}
})"));
2

Em seguida, adicione um estágio $lookup. O estágio $lookup une o campo product_id na collection orders ao campo id na collection products:

pipeline.lookup(bsoncxx::from_json(R"({
"from": "products",
"localField": "product_id",
"foreignField": "id",
"as": "product_mapping"
})"));
3

Em seguida, adicione dois $addFields estágios ao pipeline.

O primeiro estágio $addFields define o campo product_mapping como o primeiro elemento no objeto product_mapping criado no estágio $lookup anterior.

O segundo estágio $addFields cria dois novos campos, product_name e product_category, a partir dos valores no campo de objeto product_mapping :

pipeline.add_fields(bsoncxx::from_json(R"({
"product_mapping": {"$first": "$product_mapping"}
})"));
pipeline.add_fields(bsoncxx::from_json(R"({
"product_name": "$product_mapping.name",
"product_category": "$product_mapping.category"
})"));

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Finalmente, adicione um estágio $unset. A etapa $unset remove campos desnecessários do documento:

pipeline.append_stage(bsoncxx::from_json(R"({
"$unset": ["_id", "product_id", "product_mapping"]
})"));
5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection orders :

auto cursor = orders.aggregate(pipeline);

Por fim, execute o seguinte comando em seu shell para iniciar seu aplicativo:

c++ --std=c++17 agg-tutorial.cpp $(pkg-config --cflags --libs libmongocxx) -o ./app.out
./app.out
6

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o product_name e product_category do produto pedido:

{ "customer_id" : "elise_smith@myemail.com", "orderdate" : { "$date" : "2020-05-30T06:55:52Z" },
"value" : 431.43000000000000682, "product_name" : "Asus Laptop", "product_category" : "ELECTRONICS" }
{ "customer_id" : "oranieri@warmmail.com", "orderdate" : { "$date" : "1970-01-19T06:17:41.137Z" },
"value" : 63.130000000000002558, "product_name" : "Morphy Richardds Food Mixer", "product_category" : "KITCHENWARE" }
{ "customer_id" : "jjones@tepidmail.com", "orderdate" : { "$date" : "2020-12-26T08:55:46Z" },
"value" : 429.64999999999997726, "product_name" : "Asus Laptop", "product_category" : "ELECTRONICS" }

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo product_id presente em cada documento original.

1

Primeiro, inicie a agregação na coleção orders e encadeie um estágio $match que corresponda aos pedidos colocados em 2020:

var results = orders.Aggregate()
.Match(o => o.OrderDate >= DateTime.Parse("2020-01-01T00:00:00Z") &&
o.OrderDate < DateTime.Parse("2021-01-01T00:00:00Z"))
2

Em seguida, adicione um estágio $lookup. O estágio $lookup une o campo ProductId na collection orders ao campo Id na collection products:

.Lookup<Product, Order>(
foreignCollectionName: "products",
localField: "ProductId",
foreignField: "Id",
@as: "ProductMapping"
)
3

Em seguida, adicione um estágio $project ao pipeline.

O estágio $project cria dois novos campos, ProductName e ProductCategory, a partir das primeiras entradas dos respectivos valores no campo de objeto ProductMapping. O estágio também especifica quais campos incluir e excluir dos documentos de saída:

.Project(new BsonDocument
{
{ "ProductName", new BsonDocument("$first", "$ProductMapping.Name") },
{ "ProductCategory", new BsonDocument("$first", "$ProductMapping.Category") },
{ "OrderDate", 1 },
{ "CustomerId", 1 },
{ "Value", 1 },
{ "_id", 0 },
});

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Por fim, execute o aplicação em seu IDE e inspecione os resultados.

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o ProductName e ProductCategory do produto pedido:

{ "CustomerId" : "elise_smith@myemail.com", "OrderDate" : { "$date" : "2020-05-30T08:35:52Z" }, "Value" : 431.43000000000001, "ProductName" : "Asus Laptop", "ProductCategory" : "ELECTRONICS" }
{ "CustomerId" : "oranieri@warmmail.com", "OrderDate" : { "$date" : "2020-01-01T08:25:37Z" }, "Value" : 63.130000000000003, "ProductName" : "Morphy Richardds Food Mixer", "ProductCategory" : "KITCHENWARE" }
{ "CustomerId" : "jjones@tepidmail.com", "OrderDate" : { "$date" : "2020-12-26T08:55:46Z" }, "Value" : 429.64999999999998, "ProductName" : "Asus Laptop", "ProductCategory" : "ELECTRONICS" }

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo ProductId presente em cada documento original.

1

Adicione um $match estágio que corresponda aos pedidos colocados em 2020:

matchStage := bson.D{{Key: "$match", Value: bson.D{
{Key: "orderdate", Value: bson.D{
{Key: "$gte", Value: time.Date(2020, 1, 1, 0, 0, 0, 0, time.UTC)},
{Key: "$lt", Value: time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)},
}},
}}}
2

Em seguida, adicione um estágio $lookup. O estágio $lookup une o campo product_id na collection orders ao campo id na collection products:

lookupStage := bson.D{{Key: "$lookup", Value: bson.D{
{Key: "from", Value: "products"},
{Key: "localField", Value: "product_id"},
{Key: "foreignField", Value: "id"},
{Key: "as", Value: "product_mapping"},
}}}
3

Em seguida, adicione dois $set estágios ao pipeline.

O primeiro estágio $set define o campo product_mapping como o primeiro elemento no objeto product_mapping criado no estágio $lookup anterior.

O segundo estágio $set cria dois novos campos, product_name e product_category, a partir dos valores no campo de objeto product_mapping :

setStage1 := bson.D{{Key: "$set", Value: bson.D{
{Key: "product_mapping", Value: bson.D{{Key: "$first", Value: "$product_mapping"}}},
}}}
setStage2 := bson.D{{Key: "$set", Value: bson.D{
{Key: "product_name", Value: "$product_mapping.name"},
{Key: "product_category", Value: "$product_mapping.category"},
}}}

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Finalmente, adicione um estágio $unset. A etapa $unset remove campos desnecessários do documento:

unsetStage := bson.D{{Key: "$unset", Value: bson.A{"_id", "product_id", "product_mapping"}}}
5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection orders :

pipeline := mongo.Pipeline{matchStage, lookupStage, setStage1, setStage2, unsetStage}
cursor, err := orders.Aggregate(context.TODO(), pipeline)

Por fim, execute o seguinte comando em seu shell para iniciar seu aplicativo:

go run agg_tutorial.go
6

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o product_name e product_category do produto pedido:

{"customer_id":"elise_smith@myemail.com","orderdate":{"$date":"2020-05-30T08:35:52Z"},"value":431.42999267578125,"product_name":"Asus Laptop","product_category":"ELECTRONICS"}
{"customer_id":"oranieri@warmmail.com","orderdate":{"$date":"2020-01-01T08:25:37Z"},"value":63.130001068115234,"product_name":"Morphy Richardds Food Mixer","product_category":"KITCHENWARE"}
{"customer_id":"jjones@tepidmail.com","orderdate":{"$date":"2020-12-26T08:55:46Z"},"value":429.6499938964844,"product_name":"Asus Laptop","product_category":"ELECTRONICS"}

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo product_id presente em cada documento original.

1

Adicione um $match estágio que corresponda aos pedidos colocados em 2020:

pipeline.add(Aggregates.match(Filters.and(
Filters.gte("orderdate", LocalDateTime.parse("2020-01-01T00:00:00")),
Filters.lt("orderdate", LocalDateTime.parse("2021-01-01T00:00:00"))
)));
2

Em seguida, adicione um estágio $lookup. O estágio $lookup une o campo product_id na collection orders ao campo id na collection products:

pipeline.add(Aggregates.lookup(
"products",
"product_id",
"id",
"product_mapping"
));
3

Em seguida, adicione dois $set estágios ao pipeline.

O primeiro estágio $set define o campo product_mapping como o primeiro elemento no objeto product_mapping criado no estágio $lookup anterior.

O segundo estágio $set cria dois novos campos, product_name e product_category, a partir dos valores no campo de objeto product_mapping :

pipeline.add(Aggregates.set(
new Field<>(
"product_mapping",
new Document("$first", "$product_mapping")
)
));
pipeline.add(Aggregates.set(
new Field<>("product_name", "$product_mapping.name"),
new Field<>("product_category", "$product_mapping.category")
));

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Finalmente, adicione um estágio $unset. A etapa $unset remove campos desnecessários do documento:

pipeline.add(Aggregates.unset("_id", "product_id", "product_mapping"));
5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection orders :

AggregateIterable<Document> aggregationResult = orders.aggregate(pipeline);

Por fim, execute o aplicação em seu IDE.

6

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o product_name e product_category do produto pedido:

{"customer_id": "elise_smith@myemail.com", "orderdate": {"$date": "2020-05-30T08:35:52Z"}, "value": 431.43, "product_name": "Asus Laptop", "product_category": "ELECTRONICS"}
{"customer_id": "oranieri@warmmail.com", "orderdate": {"$date": "2020-01-01T08:25:37Z"}, "value": 63.13, "product_name": "Morphy Richardds Food Mixer", "product_category": "KITCHENWARE"}
{"customer_id": "jjones@tepidmail.com", "orderdate": {"$date": "2020-12-26T08:55:46Z"}, "value": 429.65, "product_name": "Asus Laptop", "product_category": "ELECTRONICS"}

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo product_id presente em cada documento original.

1

Adicione um $match estágio que corresponda aos pedidos colocados em 2020:

pipeline.add(
Aggregates.match(
Filters.and(
Filters.gte(
Order::orderDate.name,
LocalDateTime.parse("2020-01-01T00:00:00").toJavaLocalDateTime()
),
Filters.lt(Order::orderDate.name, LocalDateTime.parse("2021-01-01T00:00:00").toJavaLocalDateTime())
)
)
)
2

Em seguida, adicione um estágio $lookup. O estágio $lookup une o campo productID na collection orders ao campo ID na collection products:

pipeline.add(
Aggregates.lookup(
"products",
Order::productID.name,
Product::ID.name,
"product_mapping"
)
)
3

Em seguida, adicione dois $set estágios ao pipeline.

O primeiro estágio $set define o campo product_mapping como o primeiro elemento no objeto product_mapping criado no estágio $lookup anterior.

O segundo estágio $set cria dois novos campos, product_name e product_category, a partir dos valores no campo de objeto product_mapping :

pipeline.add(
Aggregates.set(Field("product_mapping", Document("\$first", "\$product_mapping")))
)
pipeline.add(
Aggregates.set(
Field("product_name", "\$product_mapping.name"),
Field("product_category", "\$product_mapping.category")
)
)

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Finalmente, adicione um estágio $unset. A etapa $unset remove campos desnecessários do documento:

pipeline.add(Aggregates.unset("_id", Order::productID.name, "product_mapping"))
5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection orders :

val aggregationResult = orders.aggregate<Document>(pipeline)

Por fim, execute o aplicação em seu IDE.

6

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o product_name e product_category do produto pedido:

Document{{customerID=elise_smith@myemail.com, orderDate=Sat May 30 04:35:52 EDT 2020, value=431.43, product_name=Asus Laptop, product_category=ELECTRONICS}}
Document{{customerID=oranieri@warmmail.com, orderDate=Wed Jan 01 03:25:37 EST 2020, value=63.13, product_name=Morphy Richardds Food Mixer, product_category=KITCHENWARE}}
Document{{customerID=jjones@tepidmail.com, orderDate=Sat Dec 26 03:55:46 EST 2020, value=429.65, product_name=Asus Laptop, product_category=ELECTRONICS}}

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo product_id presente em cada documento original.

1

Adicione um $match estágio que corresponda aos pedidos colocados em 2020:

pipeline.push({
$match: {
orderdate: {
$gte: new Date("2020-01-01T00:00:00Z"),
$lt: new Date("2021-01-01T00:00:00Z"),
},
},
});
2

Em seguida, adicione um estágio $lookup. O estágio $lookup une o campo product_id na collection orders ao campo id na collection products:

pipeline.push({
$lookup: {
from: "products",
localField: "product_id",
foreignField: "id",
as: "product_mapping",
},
});
3

Em seguida, adicione dois $set estágios ao pipeline.

O primeiro estágio $set define o campo product_mapping como o primeiro elemento no objeto product_mapping criado no estágio $lookup anterior.

O segundo estágio $set cria dois novos campos, product_name e product_category, a partir dos valores no campo de objeto product_mapping :

pipeline.push(
{
$set: {
product_mapping: { $first: "$product_mapping" },
},
},
{
$set: {
product_name: "$product_mapping.name",
product_category: "$product_mapping.category",
},
}
);

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Finalmente, adicione um estágio $unset. A etapa $unset remove campos desnecessários do documento:

pipeline.push({ $unset: ["_id", "product_id", "product_mapping"] });
5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection orders :

const aggregationResult = await orders.aggregate(pipeline);

Por fim, execute o seguinte comando em seu shell para iniciar seu aplicativo:

node agg_tutorial.js
6

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o product_name e product_category do produto pedido:

{
customer_id: 'elise_smith@myemail.com',
orderdate: 2020-05-30T08:35:52.000Z,
value: 431.43,
product_name: 'Asus Laptop',
product_category: 'ELECTRONICS'
}
{
customer_id: 'oranieri@warmmail.com',
orderdate: 2020-01-01T08:25:37.000Z,
value: 63.13,
product_name: 'Morphy Richardds Food Mixer',
product_category: 'KITCHENWARE'
}
{
customer_id: 'jjones@tepidmail.com',
orderdate: 2020-12-26T08:55:46.000Z,
value: 429.65,
product_name: 'Asus Laptop',
product_category: 'ELECTRONICS'
}

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo product_id presente em cada documento original.

1

Adicione um $match estágio que corresponda aos pedidos colocados em 2020:

Stage::match(
orderdate: [
Query::gte(new UTCDateTime(new DateTimeImmutable('2020-01-01T00:00:00'))),
Query::lt(new UTCDateTime(new DateTimeImmutable('2021-01-01T00:00:00'))),
]
),
2

Fora de sua instância Pipeline, crie um $lookup estágio em uma função de fábrica. O estágio ``$lookup`` une o campo product_id na coleção orders ao campo id na coleção products:

function lookupProductsStage()
{
return Stage::lookup(
from: 'products',
localField: 'product_id',
foreignField: 'id',
as: 'product_mapping',
);
}

Em seguida, na sua instância do Pipeline, chame a função lookupProductsStage():

lookupProductsStage(),
3

Em seguida, adicione dois $set estágios ao pipeline.

O primeiro estágio $set define o campo product_mapping como o primeiro elemento no objeto product_mapping criado no estágio $lookup anterior.

O segundo estágio $set cria dois novos campos, product_name e product_category, a partir dos valores no campo de objeto product_mapping :

Stage::set(
product_mapping: Expression::first(
Expression::arrayFieldPath('product_mapping')
)
),
Stage::set(
product_name: Expression::stringFieldPath('product_mapping.name'),
product_category: Expression::stringFieldPath('product_mapping.category')
),

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Finalmente, adicione um estágio $unset. A etapa $unset remove campos desnecessários do documento:

Stage::unset('_id', 'product_id', 'product_mapping')
5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection orders :

$cursor = $orders->aggregate($pipeline);

Por fim, execute o seguinte comando em seu shell para iniciar seu aplicativo:

php agg_tutorial.php
6

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o product_name e product_category do produto pedido:

{
"customer_id": "elise_smith@myemail.com",
"orderdate": {
"$date": {
"$numberLong": "1590827752000"
}
},
"value": 431.43,
"product_name": "Asus Laptop",
"product_category": "ELECTRONICS"
}
{
"customer_id": "oranieri@warmmail.com",
"orderdate": {
"$date": {
"$numberLong": "1577867137000"
}
},
"value": 63.13,
"product_name": "Morphy Richardds Food Mixer",
"product_category": "KITCHENWARE"
}
{
"customer_id": "jjones@tepidmail.com",
"orderdate": {
"$date": {
"$numberLong": "1608972946000"
}
},
"value": 429.65,
"product_name": "Asus Laptop",
"product_category": "ELECTRONICS"
}

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo product_id presente em cada documento original.

1

Adicione um $match estágio que corresponda aos pedidos colocados em 2020:

pipeline.append(
{
"$match": {
"orderdate": {
"$gte": datetime(2020, 1, 1, 0, 0, 0),
"$lt": datetime(2021, 1, 1, 0, 0, 0),
}
}
}
)
2

Em seguida, adicione um estágio $lookup. O estágio $lookup une o campo product_id na collection orders ao campo id na collection products:

pipeline.append(
{
"$lookup": {
"from": "products",
"localField": "product_id",
"foreignField": "id",
"as": "product_mapping",
}
}
)
3

Em seguida, adicione dois $set estágios ao pipeline.

O primeiro estágio $set define o campo product_mapping como o primeiro elemento no objeto product_mapping criado no estágio $lookup anterior.

O segundo estágio $set cria dois novos campos, product_name e product_category, a partir dos valores no campo de objeto product_mapping :

pipeline.extend(
[
{"$set": {"product_mapping": {"$first": "$product_mapping"}}},
{
"$set": {
"product_name": "$product_mapping.name",
"product_category": "$product_mapping.category",
}
},
]
)

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Finalmente, adicione um estágio $unset. A etapa $unset remove campos desnecessários do documento:

pipeline.append({"$unset": ["_id", "product_id", "product_mapping"]})
5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection orders :

aggregation_result = orders_coll.aggregate(pipeline)

Por fim, execute o seguinte comando em seu shell para iniciar seu aplicativo:

python3 agg_tutorial.py
6

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o product_name e product_category do produto pedido:

{'customer_id': 'elise_smith@myemail.com', 'orderdate': datetime.datetime(2020, 5, 30, 8, 35, 52), 'value': 431.43, 'product_name': 'Asus Laptop', 'product_category': 'ELECTRONICS'}
{'customer_id': 'oranieri@warmmail.com', 'orderdate': datetime.datetime(2020, 1, 1, 8, 25, 37), 'value': 63.13, 'product_name': 'Morphy Richardds Food Mixer', 'product_category': 'KITCHENWARE'}
{'customer_id': 'jjones@tepidmail.com', 'orderdate': datetime.datetime(2020, 12, 26, 8, 55, 46), 'value': 429.65, 'product_name': 'Asus Laptop', 'product_category': 'ELECTRONICS'}

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo product_id presente em cada documento original.

1

Adicione um $match estágio que corresponda aos pedidos colocados em 2020:

{
"$match": {
orderdate: {
"$gte": DateTime.parse("2020-01-01T00:00:00Z"),
"$lt": DateTime.parse("2021-01-01T00:00:00Z"),
},
},
},
2

Em seguida, adicione um estágio $lookup. O estágio $lookup une o campo product_id na collection orders ao campo id na collection products:

{
"$lookup": {
from: "products",
localField: "product_id",
foreignField: "id",
as: "product_mapping",
},
},
3

Em seguida, adicione dois $set estágios ao pipeline.

O primeiro estágio $set define o campo product_mapping como o primeiro elemento no objeto product_mapping criado no estágio $lookup anterior.

O segundo estágio $set cria dois novos campos, product_name e product_category, a partir dos valores no campo de objeto product_mapping :

{
"$set": {
product_mapping: { "$first": "$product_mapping" },
},
},
{
"$set": {
product_name: "$product_mapping.name",
product_category: "$product_mapping.category",
},
},

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Finalmente, adicione um estágio $unset. A etapa $unset remove campos desnecessários do documento:

{ "$unset": ["_id", "product_id", "product_mapping"] },
5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection orders :

aggregation_result = orders.aggregate(pipeline)

Por fim, execute o seguinte comando em seu shell para iniciar seu aplicativo:

ruby agg_tutorial.rb
6

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o product_name e product_category do produto pedido:

{"customer_id"=>"elise_smith@myemail.com", "orderdate"=>2020-05-30 08:35:52 UTC, "value"=>431.43, "product_name"=>"Asus Laptop", "product_category"=>"ELECTRONICS"}
{"customer_id"=>"oranieri@warmmail.com", "orderdate"=>2020-01-01 08:25:37 UTC, "value"=>63.13, "product_name"=>"Morphy Richardds Food Mixer", "product_category"=>"KITCHENWARE"}
{"customer_id"=>"jjones@tepidmail.com", "orderdate"=>2020-12-26 08:55:46 UTC, "value"=>429.65, "product_name"=>"Asus Laptop", "product_category"=>"ELECTRONICS"}

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo product_id presente em cada documento original.

1

Adicione um $match estágio que corresponda aos pedidos colocados em 2020:

pipeline.push(doc! {
"$match": {
"order_date": {
"$gte": DateTime::builder().year(2020).month(1).day(1).build().unwrap(),
"$lt": DateTime::builder().year(2021).month(1).day(1).build().unwrap()
}
}
});
2

Em seguida, adicione um estágio $lookup. O estágio $lookup une o campo product_id na collection orders ao campo id na collection products:

pipeline.push(doc! {
"$lookup": {
"from": "products",
"localField": "product_id",
"foreignField": "id",
"as": "product_mapping"
}
});
3

Em seguida, adicione dois $set estágios ao pipeline.

O primeiro estágio $set define o campo product_mapping como o primeiro elemento no objeto product_mapping criado no estágio $lookup anterior.

O segundo estágio $set cria dois novos campos, product_name e product_category, a partir dos valores no campo de objeto product_mapping :

pipeline.push(doc! {
"$set": {
"product_mapping": { "$first": "$product_mapping" }
}
});
pipeline.push(doc! {
"$set": {
"product_name": "$product_mapping.name",
"product_category": "$product_mapping.category"
}
});

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Finalmente, adicione um estágio $unset. A etapa $unset remove campos desnecessários do documento:

pipeline.push(doc! {
"$unset": ["_id", "product_id", "product_mapping"]
});
5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection orders :

let mut cursor = orders.aggregate(pipeline).await?;

Por fim, execute o seguinte comando em seu shell para iniciar seu aplicativo:

cargo run
6

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o product_name e product_category do produto pedido:

Document({"customer_id": String("elise_smith@myemail.com"), "order_date": DateTime(2020-05-30 8:35:52.0 +00:00:00),
"value": Double(431.42999267578125), "product_name": String("Asus Laptop"), "product_category": String("ELECTRONICS")})
Document({"customer_id": String("oranieri@warmmail.com"), "order_date": DateTime(2020-01-01 8:25:37.0 +00:00:00),
"value": Double(63.130001068115234), "product_name": String("Morphy Richardds Food Mixer"), "product_category": String("KITCHENWARE")})
Document({"customer_id": String("jjones@tepidmail.com"), "order_date": DateTime(2020-12-26 8:55:46.0 +00:00:00),
"value": Double(429.6499938964844), "product_name": String("Asus Laptop"), "product_category": String("ELECTRONICS")})

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo product_id presente em cada documento original.

1

Adicione um $match estágio que corresponda aos pedidos colocados em 2020:

Aggregates.filter(Filters.and(
Filters.gte("orderdate", dateFormat.parse("2020-01-01T00:00:00")),
Filters.lt("orderdate", dateFormat.parse("2021-01-01T00:00:00"))
)),
2

Em seguida, adicione um estágio $lookup. O estágio $lookup une o campo product_id na collection orders ao campo id na collection products:

Aggregates.lookup(
"products",
"product_id",
"id",
"product_mapping"
),
3

Em seguida, adicione dois $set estágios ao pipeline.

O primeiro estágio $set define o campo product_mapping como o primeiro elemento no objeto product_mapping criado no estágio $lookup anterior.

O segundo estágio $set cria dois novos campos, product_name e product_category, a partir dos valores no campo de objeto product_mapping :

Aggregates.set(Field("product_mapping", Document("$first" -> "$product_mapping"))),
Aggregates.set(
Field("product_name", "$product_mapping.name"),
Field("product_category", "$product_mapping.category")
),

Dica

Como esta é uma união um-para-um, o estágio $lookup adiciona apenas um elemento de array ao documento de entrada. O pipeline usa o operador $first para recuperar os dados desse elemento.

4

Finalmente, adicione um estágio $unset. A etapa $unset remove campos desnecessários do documento:

Aggregates.unset("_id", "product_id", "product_mapping")
5

Adicione o seguinte código ao final do seu aplicativo para executar a aggregation na collection orders :

orders.aggregate(pipeline)
.subscribe(
(doc: Document) => println(doc.toJson()),
(e: Throwable) => println(s"Error: $e"),
)

Por fim, execute o aplicação em seu IDE.

6

O resultado agregado contém três documentos. Os documentos representam pedidos de clientes que ocorreram em 2020, com o product_name e product_category do produto pedido:

{"customer_id": "elise_smith@myemail.com", "orderdate": {"$date": "2020-05-30T12:35:52Z"}, "value": 431.43, "product_name": "Asus Laptop", "product_category": "ELECTRONICS"}
{"customer_id": "oranieri@warmmail.com", "orderdate": {"$date": "2020-01-01T13:25:37Z"}, "value": 63.13, "product_name": "Morphy Richardds Food Mixer", "product_category": "KITCHENWARE"}
{"customer_id": "jjones@tepidmail.com", "orderdate": {"$date": "2020-12-26T13:55:46Z"}, "value": 429.65, "product_name": "Asus Laptop", "product_category": "ELECTRONICS"}

O resultado consiste em documentos que contêm campos de documentos na collection orders e na collection products , unidos pela correspondência do campo product_id presente em cada documento original.

Voltar

Desenrolar arrays

Nesta página