Este tutorial ilustra cómo construir un pipeline de agregación, realizar la agregación en una colección y mostrar los resultados utilizando el lenguaje que elijas.
Acerca de esta tarea
Este tutorial demuestra cómo hacer query de un subconjunto específico de documentos en una colección.
La canalización de agregación realiza las siguientes operaciones:
Coincide un subconjunto de documentos por un valor de campo
Da formato a los documentos de resultados
Antes de comenzar
➤ Usar el menú desplegable Seleccionar lenguaje en la parte superior derecha para establecer el lenguaje de los siguientes ejemplos o seleccionar MongoDB Shell.
Este ejemplo utiliza un persons Colección que contiene documentos que describen el nombre, la fecha de nacimiento, la profesión y otros detalles de cada persona. La agregación selecciona los documentos según si los valores de sus campos coinciden con los criterios especificados.
Para crear la colección persons, utilice el
insertMany() :
db.persons.deleteMany({}) db.persons.insertMany( [ { person_id: "6392529400", firstname: "Elise", lastname: "Smith", dateofbirth: new Date("1972-01-13T09:32:07Z"), vocation: "ENGINEER", address: { number: 5625, street: "Tipa Circle", city: "Wojzinmoj", } }, { person_id: "1723338115", firstname: "Olive", lastname: "Ranieri", dateofbirth: new Date("1985-05-12T23:14:30Z"), gender: "FEMALE", vocation: "ENGINEER", address: { number: 9303, street: "Mele Circle", city: "Tobihbo", } }, { person_id: "8732762874", firstname: "Toni", lastname: "Jones", dateofbirth: new Date("1991-11-23T16:53:56Z"), vocation: "POLITICIAN", address: { number: 1, street: "High Street", city: "Upper Abbeywoodington", } }, { person_id: "7363629563", firstname: "Bert", lastname: "Gooding", dateofbirth: new Date("1941-04-07T22:11:52Z"), vocation: "FLORIST", address: { number: 13, street: "Upper Bold Road", city: "Redringtonville", } }, { person_id: "1029648329", firstname: "Sophie", lastname: "Celements", dateofbirth: new Date("1959-07-06T17:35:45Z"), vocation: "ENGINEER", address: { number: 5, street: "Innings Close", city: "Basilbridge", } }, { person_id: "7363626383", firstname: "Carl", lastname: "Simmons", dateofbirth: new Date("1998-12-26T13:13:55Z"), vocation: "ENGINEER", address: { number: 187, street: "Hillside Road", city: "Kenningford", } } ] )
Crea la aplicación de plantilla
Antes de comenzar a seguir este tutorial de agregación, debes configurar una nueva aplicación en C. Puedes usar esta aplicación para conectarte a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar el pipeline de agregación.
Tip
Para aprender cómo instalar el controlador y conectarse a MongoDB, consulta la Guía para comenzar con el controlador C.
Para obtener más información sobre cómo realizar agregaciones en el controlador C, consulta la Guía de agregación.
Después de instalar el controlador, crea un archivo llamado agg-tutorial.c. Pega el siguiente código en este archivo para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
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, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de la implementación, se debe consultar el paso Crear una cadena de conexión de la guía de introducción a C++.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
char *uri = "mongodb+srv://mongodb-example:27017";
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
mongoc_collection_t *persons = mongoc_client_get_collection(client, "agg_tutorials_db", "persons"); { bson_t *filter = bson_new(); bson_error_t error; if (!mongoc_collection_delete_many(persons, filter, NULL, NULL, &error)) { fprintf(stderr, "Delete error: %s\n", error.message); } bson_destroy(filter); } { size_t num_docs = 6; bson_t *docs[num_docs]; docs[0] = BCON_NEW( "person_id", "6392529400", "firstname", "Elise", "lastname", "Smith", "dateofbirth", BCON_DATE_TIME(653616727000UL), // 1972-01-13T09:32:07Z "vocation", "ENGINEER", "address", "{", "number", BCON_INT32(5625), "street", "Tipa Circle", "city", "Wojzinmoj", "}"); docs[1] = BCON_NEW( "person_id", "1723338115", "firstname", "Olive", "lastname", "Ranieri", "dateofbirth", BCON_DATE_TIME(485113500000UL), // 1985-05-12T23:14:30Z "gender", "FEMALE", "vocation", "ENGINEER", "address", "{", "number", BCON_INT32(9303), "street", "Mele Circle", "city", "Tobihbo", "}"); docs[2] = BCON_NEW( "person_id", "8732762874", "firstname", "Toni", "lastname", "Jones", "dateofbirth", BCON_DATE_TIME(690559710000UL), // 1991-11-23T16:53:56Z "vocation", "POLITICIAN", "address", "{", "number", BCON_INT32(1), "street", "High Street", "city", "Upper Abbeywoodington", "}"); docs[3] = BCON_NEW( "person_id", "7363629563", "firstname", "Bert", "lastname", "Gooding", "dateofbirth", BCON_DATE_TIME(449595112000UL), // 1941-04-07T22:11:52Z "vocation", "FLORIST", "address", "{", "number", BCON_INT32(13), "street", "Upper Bold Road", "city", "Redringtonville", "}"); docs[4] = BCON_NEW( "person_id", "1029648329", "firstname", "Sophie", "lastname", "Celements", "dateofbirth", BCON_DATE_TIME(316265745000UL), // 1959-07-06T17:35:45Z "vocation", "ENGINEER", "address", "{", "number", BCON_INT32(5), "street", "Innings Close", "city", "Basilbridge", "}"); docs[5] = BCON_NEW( "person_id", "7363626383", "firstname", "Carl", "lastname", "Simmons", "dateofbirth", BCON_DATE_TIME(915250045000UL), // 1998-12-26T13:13:55Z "vocation", "ENGINEER", "address", "{", "number", BCON_INT32(187), "street", "Hillside Road", "city", "Kenningford", "}"); bson_error_t error; if (!mongoc_collection_insert_many(persons, (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]); } }
Crea la aplicación de plantilla
Antes de comenzar a seguir un tutorial de agregación, debes configurar una nueva aplicación de C++. Puedes usar esta aplicación para conectarte a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar el pipeline de agregación.
Tip
Para aprender cómo instalar el controlador y conectarte a MongoDB, consulta el tutorial Comienza con C++.
Para obtener más información sobre el uso del controlador C++, consulte la documentación de la API.
Para obtener más información sobre cómo realizar agregaciones en el controlador C++, consulta la guía de agregación.
Después de instalar el controlador, crea un archivo llamado agg-tutorial.cpp. Pega el siguiente código en este archivo para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
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, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de la implementación, se debe consultar el paso Crear una cadena de conexión del tutorial de introducción a C++.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
mongocxx::uri uri{"mongodb+srv://mongodb-example:27017"};
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
auto persons = db["persons"]; std::vector<bsoncxx::document::value> docs = { bsoncxx::from_json(R"({ "person_id": "6392529400", "firstname": "Elise", "lastname": "Smith", "dateofbirth": {"$date": 620947927}, "vocation": "ENGINEER", "address": { "number": 5625, "street": "Tipa Circle", "city": "Wojzinmoj" } })"), bsoncxx::from_json(R"({ "person_id": "1723338115", "firstname": "Olive", "lastname": "Ranieri", "dateofbirth": {"$date": 485529270000}, "gender": "FEMALE", "vocation": "ENGINEER", "address": { "number": 9303, "street": "Mele Circle", "city": "Tobihbo" } })"), bsoncxx::from_json(R"({ "person_id": "8732762874", "firstname": "Toni", "lastname": "Jones", "dateofbirth": {"$date": 690978836000}, "vocation": "POLITICIAN", "address": { "number": 1, "street": "High Street", "city": "Upper Abbeywoodington" } })"), bsoncxx::from_json(R"({ "person_id": "7363629563", "firstname": "Bert", "lastname": "Gooding", "dateofbirth": {"$date": -88368048000}, "vocation": "FLORIST", "address": { "number": 13, "street": "Upper Bold Road", "city": "Redringtonville" } })"), bsoncxx::from_json(R"({ "person_id": "1029648329", "firstname": "Sophie", "lastname": "Celements", "dateofbirth": {"$date": -31561935000}, "vocation": "ENGINEER", "address": { "number": 5, "street": "Innings Close", "city": "Basilbridge" } })"), bsoncxx::from_json(R"({ "person_id": "7363626383", "firstname": "Carl", "lastname": "Simmons", "dateofbirth": {"$date": 915148835000}, "vocation": "ENGINEER", "address": { "number": 187, "street": "Hillside Road", "city": "Kenningford" } })") }; auto result = persons.insert_many(docs); // Might throw an exception
Crea la aplicación de plantilla
Antes de comenzar a seguir este tutorial de agregación, debes configurar una nueva aplicación de C#/.NET. Puedes usar esta aplicación para conectarte a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar el pipeline de agregación.
Tip
Para aprender cómo instalar el controlador y conectarte a MongoDB, consulta la Guía de inicio rápido del controlador C#/.NET.
Para obtener más información sobre cómo realizar agregaciones en el controlador C#/.NET, consulta la Guía de agregación.
Después de instalar el controlador, pegue el siguiente código en su archivo Program.cs para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
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, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de la implementación, se debe consultar el paso Configurar un clúster de nivel gratuito en Atlas de la guía de inicio rápido de C#.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
var uri = "mongodb+srv://mongodb-example:27017";
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Primero, crea clases de C# para modelar los datos en la colección persons:
public class Person { [] public ObjectId Id { get; set; } public string PersonId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public DateTime DateOfBirth { get; set; } [] public string? Gender { get; set; } public string Vocation { get; set; } public Address Address { get; set; } } public class Address { public int Number { get; set; } public string Street { get; set; } public string City { get; set; } }
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
var persons = aggDB.GetCollection<Person>("persons"); persons.DeleteMany(Builders<Person>.Filter.Empty); persons.InsertMany(new List<Person> { new Person { PersonId = "6392529400", FirstName = "Elise", LastName = "Smith", DateOfBirth = DateTime.Parse("1972-01-13T09:32:07Z"), Vocation = "ENGINEER", Address = new Address { Number = 5625, Street = "Tipa Circle", City = "Wojzinmoj" } }, new Person { PersonId = "1723338115", FirstName = "Olive", LastName = "Ranieri", DateOfBirth = DateTime.Parse("1985-05-12T23:14:30Z"), Gender = "FEMALE", Vocation = "ENGINEER", Address = new Address { Number = 9303, Street = "Mele Circle", City = "Tobihbo" } }, new Person { PersonId = "8732762874", FirstName = "Toni", LastName = "Jones", DateOfBirth = DateTime.Parse("1991-11-23T16:53:56Z"), Vocation = "POLITICIAN", Address = new Address { Number = 1, Street = "High Street", City = "Upper Abbeywoodington" } }, new Person { PersonId = "7363629563", FirstName = "Bert", LastName = "Gooding", DateOfBirth = DateTime.Parse("1941-04-07T22:11:52Z"), Vocation = "FLORIST", Address = new Address { Number = 13, Street = "Upper Bold Road", City = "Redringtonville" } }, new Person { PersonId = "1029648329", FirstName = "Sophie", LastName = "Celements", DateOfBirth = DateTime.Parse("1959-07-06T17:35:45Z"), Vocation = "ENGINEER", Address = new Address { Number = 5, Street = "Innings Close", City = "Basilbridge" } }, new Person { PersonId = "7363626383", FirstName = "Carl", LastName = "Simmons", DateOfBirth = DateTime.Parse("1998-12-26T13:13:55Z"), Vocation = "ENGINEER", Address = new Address { Number = 187, Street = "Hillside Road", City = "Kenningford" } } });
Crea la aplicación de plantilla
Antes de comenzar a seguir este tutorial de agregación, debes configurar una nueva aplicación Go. Puedes usar esta aplicación para conectarte a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar el pipeline de agregación.
Tip
Para aprender cómo instalar el controlador y conectarse a MongoDB, consulte la Guía de inicio rápido del controlador Go.
Para obtener más información sobre cómo realizar agregaciones en el controlador de Go, consulta la Guía de agregación.
Después de instalar el controlador, crea un archivo llamado agg_tutorial.go. Pega el siguiente código en este archivo para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
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, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de la implementación, se debe consultar el paso Crear un clúster de MongoDB de la guía de inicio rápido de Go.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
const uri = "mongodb+srv://mongodb-example:27017";
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Primero, crea estructuras de Go para modelar los datos en la colección persons:
type Person struct { PersonID string `bson:"person_id"` Firstname string `bson:"firstname"` Lastname string `bson:"lastname"` Gender string `bson:"gender,omitempty"` DateOfBirth bson.DateTime `bson:"dateofbirth"` Vocation string `bson:"vocation"` Address Address `bson:"address"` } type Address struct { Number int Street string City string }
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
persons := aggDB.Collection("persons") persons.DeleteMany(context.TODO(), bson.D{}) _, err = persons.InsertMany(context.TODO(), []interface{}{ Person{ PersonID: "6392529400", Firstname: "Elise", Lastname: "Smith", DateOfBirth: bson.NewDateTimeFromTime(time.Date(1972, 1, 13, 9, 32, 7, 0, time.UTC)), Vocation: "ENGINEER", Address: Address{Number: 5625, Street: "Tipa Circle", City: "Wojzinmoj"}, }, Person{ PersonID: "1723338115", Firstname: "Olive", Lastname: "Ranieri", Gender: "FEMALE", DateOfBirth: bson.NewDateTimeFromTime(time.Date(1985, 5, 12, 23, 14, 30, 0, time.UTC)), Vocation: "ENGINEER", Address: Address{Number: 9303, Street: "Mele Circle", City: "Tobihbo"}, }, Person{ PersonID: "8732762874", Firstname: "Toni", Lastname: "Jones", DateOfBirth: bson.NewDateTimeFromTime(time.Date(1991, 11, 23, 16, 53, 56, 0, time.UTC)), Vocation: "POLITICIAN", Address: Address{Number: 1, Street: "High Street", City: "Upper Abbeywoodington"}, }, Person{ PersonID: "7363629563", Firstname: "Bert", Lastname: "Gooding", DateOfBirth: bson.NewDateTimeFromTime(time.Date(1941, 4, 7, 22, 11, 52, 0, time.UTC)), Vocation: "FLORIST", Address: Address{Number: 13, Street: "Upper Bold Road", City: "Redringtonville"}, }, Person{ PersonID: "1029648329", Firstname: "Sophie", Lastname: "Celements", DateOfBirth: bson.NewDateTimeFromTime(time.Date(1959, 7, 6, 17, 35, 45, 0, time.UTC)), Vocation: "ENGINEER", Address: Address{Number: 5, Street: "Innings Close", City: "Basilbridge"}, }, Person{ PersonID: "7363626383", Firstname: "Carl", Lastname: "Simmons", DateOfBirth: bson.NewDateTimeFromTime(time.Date(1998, 12, 26, 13, 13, 55, 0, time.UTC)), Vocation: "ENGINEER", Address: Address{Number: 187, Street: "Hillside Road", City: "Kenningford"}, }, }) if err != nil { log.Fatal(err) }
Crea la aplicación de plantilla
Antes de comenzar a seguir un tutorial de agregación, debes configurar una nueva aplicación de Java. Puedes usar esta aplicación para conectarte a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar el pipeline de agregación.
Tip
Para aprender cómo instalar el controlador y conectarte a MongoDB, consulta la Guía de inicio del controlador de Java.
Para obtener más información sobre cómo realizar agregaciones en el Java Sync Driver, consulta la Guía de agregación.
Después de instalar el controlador, crea un archivo llamado AggTutorial.java. Pega el siguiente código en este archivo para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
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, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de la implementación, se debe consultar el paso Crear una cadena de conexión de la guía de inicio rápido de Java Sync.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
String uri = "mongodb+srv://mongodb-example:27017";
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
MongoCollection<Document> persons = aggDB.getCollection("persons"); persons.deleteMany(Filters.empty()); persons.insertMany( Arrays.asList( new Document("person_id", "6392529400") .append("firstname", "Elise") .append("lastname", "Smith") .append("dateofbirth", LocalDateTime.parse("1972-01-13T09:32:07")) .append("vocation", "ENGINEER") .append("address", new Document("number", 5625) .append("street", "Tipa Circle") .append("city", "Wojzinmoj")), new Document("person_id", "1723338115") .append("firstname", "Olive") .append("lastname", "Ranieri") .append("dateofbirth", LocalDateTime.parse("1985-05-12T23:14:30")) .append("gender", "FEMALE") .append("vocation", "ENGINEER") .append("address", new Document("number", 9303) .append("street", "Mele Circle") .append("city", "Tobihbo")), new Document("person_id", "8732762874") .append("firstname", "Toni") .append("lastname", "Jones") .append("dateofbirth", LocalDateTime.parse("1991-11-23T16:53:56")) .append("vocation", "POLITICIAN") .append("address", new Document("number", 1) .append("street", "High Street") .append("city", "Upper Abbeywoodington")), new Document("person_id", "7363629563") .append("firstname", "Bert") .append("lastname", "Gooding") .append("dateofbirth", LocalDateTime.parse("1941-04-07T22:11:52")) .append("vocation", "FLORIST") .append("address", new Document("number", 13) .append("street", "Upper Bold Road") .append("city", "Redringtonville")), new Document("person_id", "1029648329") .append("firstname", "Sophie") .append("lastname", "Celements") .append("dateofbirth", LocalDateTime.parse("1959-07-06T17:35:45")) .append("vocation", "ENGINEER") .append("address", new Document("number", 5) .append("street", "Innings Close") .append("city", "Basilbridge")), new Document("person_id", "7363626383") .append("firstname", "Carl") .append("lastname", "Simmons") .append("dateofbirth", LocalDateTime.parse("1998-12-26T13:13:55")) .append("vocation", "ENGINEER") .append("address", new Document("number", 187) .append("street", "Hillside Road") .append("city", "Kenningford")) ) );
Crea la aplicación de plantilla
Antes de comenzar a seguir un tutorial de agregación, debes configurar una nueva aplicación de Kotlin. Puedes usar esta aplicación para conectarte a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar el pipeline de agregación.
Tip
Para aprender cómo instalar el controlador y conectarte a MongoDB, consulta la Guía de inicio rápido del controlador Kotlin.
Para obtener más información sobre cómo realizar agregaciones en el controlador de Kotlin, consulta la Guía de agregación.
Además del driver, también se deben añadir las siguientes dependencias al archivo de build.gradle.kts y volver a cargar el proyecto:
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") }
Después de instalar el controlador, crea un archivo llamado AggTutorial.kt. Pega el siguiente código en este archivo para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
package org.example // Modify imports for each tutorial as needed. import com.mongodb.client.model.* import com.mongodb.kotlin.client.coroutine.MongoClient import kotlinx.coroutines.runBlocking import kotlinx.datetime.LocalDateTime import kotlinx.datetime.toJavaLocalDateTime import kotlinx.serialization.Contextual import kotlinx.serialization.Serializable import org.bson.Document import org.bson.conversions.Bson // Define data classes. data class MyClass( ... ) suspend fun main() { // Replace the placeholder with your connection string. val uri = "<connection string>" MongoClient.create(uri).use { mongoClient -> val aggDB = mongoClient.getDatabase("agg_tutorials_db") // Get a reference to relevant collections. // ... val someColl = ... // Delete any existing documents in collections if needed. // ... someColl.deleteMany(empty()) // Insert sample data into the collection or collections. // ... someColl.insertMany( ... ) // Create an empty pipeline. val pipeline = mutableListOf<Bson>() // Add code to create pipeline stages. // ... pipeline.add(...) // Run the aggregation. // ... val aggregationResult = someColl.aggregate<Document>(pipeline) // Print the aggregation results. aggregationResult.collect { println(it) } } }
Para cada tutorial, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de la implementación, se debe consultar el paso Conectarte al clúster de la guía de inicio rápido del driver de Kotlin.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
val uri = "mongodb+srv://mongodb-example:27017"
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Primero, cree clases de datos de Kotlin para modelar los datos en la colección persons:
data class Address( val number: Int, val street: String, val city: String ) data class Person( val personID: String, val firstname: String, val lastname: String, val dateOfBirth: LocalDateTime, val vocation: String, val address: Address, val gender: String? = null )
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
val persons = aggDB.getCollection<Person>("persons") persons.deleteMany(Filters.empty()) persons.insertMany( listOf( Person( "6392529400", "Elise", "Smith", LocalDateTime.parse("1972-01-13T09:32:07"), "ENGINEER", Address(5625, "Tipa Circle", "Wojzinmoj") ), Person( "1723338115", "Olive", "Ranieri", LocalDateTime.parse("1985-05-12T23:14:30"), "ENGINEER", Address(9303, "Mele Circle", "Tobihbo"), "FEMALE" ), Person( "8732762874", "Toni", "Jones", LocalDateTime.parse("1991-11-23T16:53:56"), "POLITICIAN", Address(1, "High Street", "Upper Abbeywoodington") ), Person( "7363629563", "Bert", "Gooding", LocalDateTime.parse("1941-04-07T22:11:52"), "FLORIST", Address(13, "Upper Bold Road", "Redringtonville") ), Person( "1029648329", "Sophie", "Celements", LocalDateTime.parse("1959-07-06T17:35:45"), "ENGINEER", Address(5, "Innings Close", "Basilbridge") ), Person( "7363626383", "Carl", "Simmons", LocalDateTime.parse("1998-12-26T13:13:55"), "ENGINEER", Address(187, "Hillside Road", "Kenningford") ) ) )
Crea la aplicación de plantilla
Antes de comenzar a seguir este tutorial de agregación, debes configurar una nueva aplicación de Node.js. Puedes usar esta aplicación para conectarte a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar el pipeline de agregación.
Tip
Para aprender a instalar el controlador y conectarte a MongoDB, consulta la Guía de inicio rápido del controlador de Node.js.
Para obtener más información sobre cómo realizar agregaciones en el controlador de Nodo.js, consulta la Guía de agregación.
Después de instalar el controlador, crea un archivo llamado agg_tutorial.js. Pega el siguiente código en este archivo para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
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, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de la implementación, se debe consultar el paso Crear una cadena de conexión de la guía de inicio rápido de Nodo.js.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
const uri = "mongodb+srv://mongodb-example:27017";
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
const persons = aggDB.collection("persons"); await persons.deleteMany({}); await persons.insertMany([ { person_id: "6392529400", firstname: "Elise", lastname: "Smith", dateofbirth: new Date("1972-01-13T09:32:07Z"), vocation: "ENGINEER", address: { number: 5625, street: "Tipa Circle", city: "Wojzinmoj", }, }, { person_id: "1723338115", firstname: "Olive", lastname: "Ranieri", dateofbirth: new Date("1985-05-12T23:14:30Z"), gender: "FEMALE", vocation: "ENGINEER", address: { number: 9303, street: "Mele Circle", city: "Tobihbo", }, }, { person_id: "8732762874", firstname: "Toni", lastname: "Jones", dateofbirth: new Date("1991-11-23T16:53:56Z"), vocation: "POLITICIAN", address: { number: 1, street: "High Street", city: "Upper Abbeywoodington", }, }, { person_id: "7363629563", firstname: "Bert", lastname: "Gooding", dateofbirth: new Date("1941-04-07T22:11:52Z"), vocation: "FLORIST", address: { number: 13, street: "Upper Bold Road", city: "Redringtonville", }, }, { person_id: "1029648329", firstname: "Sophie", lastname: "Celements", dateofbirth: new Date("1959-07-06T17:35:45Z"), vocation: "ENGINEER", address: { number: 5, street: "Innings Close", city: "Basilbridge", }, }, { person_id: "7363626383", firstname: "Carl", lastname: "Simmons", dateofbirth: new Date("1998-12-26T13:13:55Z"), vocation: "ENGINEER", address: { number: 187, street: "Hillside Road", city: "Kenningford", }, }, ]);
Crea la aplicación de plantilla
Antes de comenzar a seguir este tutorial de agregación, debes configurar una nueva aplicación PHP. Puedes usar esta aplicación para conectarte a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar el pipeline de agregación.
Tip
Para aprender cómo instalar la biblioteca PHP y conectarte a MongoDB, consulta el tutorial Comenzar a usar la librería PHP.
Para obtener más información sobre cómo realizar agregaciones en la biblioteca de PHP, consulta la Guía de agregación.
Después de instalar la biblioteca, crea un archivo llamado agg_tutorial.php. Pega el siguiente código en este archivo para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
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, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de la implementación, se debe consultar el paso Crear una cadena de conexión del tutorial Comenzar con la librería PHP.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
$uri = 'mongodb+srv://mongodb-example:27017';
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
$persons = $client->agg_tutorials_db->persons; $persons->deleteMany([]); $persons->insertMany( [ [ 'person_id' => '6392529400', 'firstname' => 'Elise', 'lastname' => 'Smith', 'dateofbirth' => new UTCDateTime(new DateTimeImmutable('1972-01-13T09:32:07')), 'vocation' => 'ENGINEER', 'address' => ['number' => 5625, 'Street' => 'Tipa Circle', 'city' => 'Wojzinmoj'], ], [ 'person_id' => '1723338115', 'firstname' => 'Olive', 'lastname' => 'Ranieri', 'gender' => 'FEMALE', 'dateofbirth' => new UTCDateTime(new DateTimeImmutable('1985-05-12T23:14:30')), 'vocation' => 'ENGINEER', 'address' => ['number' => 9303, 'street' => 'Mele Circle', 'city' => 'Tobihbo'], ], [ 'person_id' => '8732762874', 'firstname' => 'Toni', 'lastname' => 'Jones', 'dateofbirth' => new UTCDateTime(new DateTimeImmutable('1991-11-23T16:53:56')), 'vocation' => 'POLITICIAN', 'address' => ['number' => 1, 'street' => 'High Street', 'city' => 'Upper Abbeywoodington'], ], [ 'person_id' => '7363629563', 'firstname' => 'Bert', 'lastname' => 'Gooding', 'dateofbirth' => new UTCDateTime(new DateTimeImmutable('1941-04-07T22:11:52')), 'vocation' => 'FLORIST', 'address' => ['number' => 13, 'street' => 'Upper Bold Road', 'city' => 'Redringtonville'], ], [ 'person_id' => '1029648329', 'firstname' => 'Sophie', 'lastname' => 'Celements', 'dateofbirth' => new UTCDateTime(new DateTimeImmutable('1959-07-06T17:35:45')), 'vocation' => 'ENGINEER', 'address' => ['number' => 5, 'street' => 'Innings Close', 'city' => 'Basilbridge'], ], [ 'person_id' => '7363626383', 'firstname' => 'Carl', 'lastname' => 'Simmons', 'dateofbirth' => new UTCDateTime(new DateTimeImmutable('1998-12-26T13:13:55')), 'vocation' => 'ENGINEER', 'address' => ['number' => 187, 'street' => 'Hillside Road', 'city' => 'Kenningford'], ] ] );
Crea la aplicación de plantilla
Antes de comenzar a seguir este tutorial de agregación, debe configurar una nueva aplicación de Python. Puedes usar esta aplicación para conectarte a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar el pipeline de agregación.
Tip
Para aprender a instalar PyMongo y conectarte a MongoDB, consulta el tutorial Get Started with PyMongo.
Para obtener más información sobre cómo realizar agregaciones en PyMongo, consulta la Guía de agregación.
Después de instalar la biblioteca, crea un archivo llamado agg_tutorial.py. Pega el siguiente código en este archivo para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
# 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, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de la implementación, se debe consultar el paso Crear una cadena de conexión del tutorial Comenzar con la librería PHP.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
uri = "mongodb+srv://mongodb-example:27017"
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
person_coll = agg_db["persons"] person_coll.delete_many({}) person_data = [ { "person_id": "6392529400", "firstname": "Elise", "lastname": "Smith", "dateofbirth": datetime(1972, 1, 13, 9, 32, 7), "vocation": "ENGINEER", "address": { "number": 5625, "street": "Tipa Circle", "city": "Wojzinmoj", }, }, { "person_id": "1723338115", "firstname": "Olive", "lastname": "Ranieri", "dateofbirth": datetime(1985, 5, 12, 23, 14, 30), "gender": "FEMALE", "vocation": "ENGINEER", "address": { "number": 9303, "street": "Mele Circle", "city": "Tobihbo", }, }, { "person_id": "8732762874", "firstname": "Toni", "lastname": "Jones", "dateofbirth": datetime(1991, 11, 23, 16, 53, 56), "vocation": "POLITICIAN", "address": { "number": 1, "street": "High Street", "city": "Upper Abbeywoodington", }, }, { "person_id": "7363629563", "firstname": "Bert", "lastname": "Gooding", "dateofbirth": datetime(1941, 4, 7, 22, 11, 52), "vocation": "FLORIST", "address": { "number": 13, "street": "Upper Bold Road", "city": "Redringtonville", }, }, { "person_id": "1029648329", "firstname": "Sophie", "lastname": "Celements", "dateofbirth": datetime(1959, 7, 6, 17, 35, 45), "vocation": "ENGINEER", "address": { "number": 5, "street": "Innings Close", "city": "Basilbridge", }, }, { "person_id": "7363626383", "firstname": "Carl", "lastname": "Simmons", "dateofbirth": datetime(1998, 12, 26, 13, 13, 55), "vocation": "ENGINEER", "address": { "number": 187, "street": "Hillside Road", "city": "Kenningford", }, }, ] person_coll.insert_many(person_data)
Crea la aplicación de plantilla
Antes de comenzar a seguir este tutorial de agregación, debes configurar una nueva aplicación de Ruby. Puedes usar esta aplicación para conectarte a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar el pipeline de agregación.
Tip
Para aprender cómo instalar el controlador de Ruby y conectarte a MongoDB, consulta la Guía de introducción al controlador de Ruby.
Para obtener más información sobre cómo realizar agregaciones en el controlador Ruby, consulta la Guía de agregación.
Después de instalar el controlador, crea un archivo llamado agg_tutorial.rb. Pega el siguiente código en este archivo para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
# 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, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de la implementación, se debe consultar el paso Crear una cadena de conexión de la guía de inicio de Ruby.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
uri = "mongodb+srv://mongodb-example:27017"
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
persons = agg_db[:persons] persons.delete_many({}) persons.insert_many( [ { person_id: "6392529400", firstname: "Elise", lastname: "Smith", dateofbirth: DateTime.parse("1972-01-13T09:32:07Z"), vocation: "ENGINEER", address: { number: 5625, street: "Tipa Circle", city: "Wojzinmoj", }, }, { person_id: "1723338115", firstname: "Olive", lastname: "Ranieri", dateofbirth: DateTime.parse("1985-05-12T23:14:30Z"), gender: "FEMALE", vocation: "ENGINEER", address: { number: 9303, street: "Mele Circle", city: "Tobihbo", }, }, { person_id: "8732762874", firstname: "Toni", lastname: "Jones", dateofbirth: DateTime.parse("1991-11-23T16:53:56Z"), vocation: "POLITICIAN", address: { number: 1, street: "High Street", city: "Upper Abbeywoodington", }, }, { person_id: "7363629563", firstname: "Bert", lastname: "Gooding", dateofbirth: DateTime.parse("1941-04-07T22:11:52Z"), vocation: "FLORIST", address: { number: 13, street: "Upper Bold Road", city: "Redringtonville", }, }, { person_id: "1029648329", firstname: "Sophie", lastname: "Celements", dateofbirth: DateTime.parse("1959-07-06T17:35:45Z"), vocation: "ENGINEER", address: { number: 5, street: "Innings Close", city: "Basilbridge", }, }, { person_id: "7363626383", firstname: "Carl", lastname: "Simmons", dateofbirth: DateTime.parse("1998-12-26T13:13:55Z"), vocation: "ENGINEER", address: { number: 187, street: "Hillside Road", city: "Kenningford", }, }, ] )
Crea la aplicación de plantilla
Antes de comenzar a seguir este tutorial de agregación, debes configurar una nueva aplicación de Rust. Puedes usar esta aplicación para conectarte a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar el pipeline de agregación.
Tip
Para aprender cómo instalar el controlador y conectarte a MongoDB, consulta la Guía de inicio rápido del controlador de Rust.
Para obtener más información sobre cómo realizar agregaciones en el controlador de Rust, consulta la Guía de agregación.
Después de instalar el controlador, crea un archivo llamado agg-tutorial.rs. Pega el siguiente código en este archivo para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
use mongodb::{ bson::{doc, Document}, options::ClientOptions, Client, }; use futures::stream::TryStreamExt; use std::error::Error; // Define structs. // #[derive(Debug, Serialize, Deserialize)] // struct MyStruct { ... } async fn main() mongodb::error::Result<()> { // Replace the placeholder with your connection string. let uri = "<connection string>"; let client = Client::with_uri_str(uri).await?; let agg_db = client.database("agg_tutorials_db"); // Get a reference to relevant collections. // ... let some_coll: Collection<T> = agg_db.collection("..."); // ... let another_coll: Collection<T> = agg_db.collection("..."); // Delete any existing documents in collections if needed. // ... some_coll.delete_many(doc! {}).await?; // Insert sample data into the collection or collections. // ... some_coll.insert_many(vec![...]).await?; // Create an empty pipeline. let mut pipeline = Vec::new(); // Add code to create pipeline stages. // pipeline.push(doc! { ... }); // Run the aggregation and print the results. let mut results = some_coll.aggregate(pipeline).await?; while let Some(result) = results.try_next().await? { println!("{:?}\n", result); } Ok(()) }
Para cada tutorial, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de su implementación, consulte el paso Crear una cadena de conexión de la guía de inicio rápido de Rust.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
let uri = "mongodb+srv://mongodb-example:27017";
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Primero, crea estructuras de Rust para modelar los datos en la colección persons:
struct Address { number: i32, street: String, city: String, } struct Person { person_id: String, firstname: String, lastname: String, dateofbirth: DateTime, vocation: String, address: Address, }
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
let persons: Collection<Person> = agg_db.collection("persons"); persons.delete_many(doc! {}).await?; let data = vec![ Person { person_id: "6392529400".to_string(), firstname: "Elise".to_string(), lastname: "Smith".to_string(), dateofbirth: DateTime::builder().year(1972).month(1).day(13).hour(9).minute(32).second(7).build().unwrap(), vocation: "ENGINEER".to_string(), address: Address { number: 5625, street: "Tipa Circle".to_string(), city: "Wojzinmoj".to_string(), }, }, Person { person_id: "1723338115".to_string(), firstname: "Olive".to_string(), lastname: "Ranieri".to_string(), gender: "FEMALE".to_string(), dateofbirth: DateTime::builder().year(1985).month(5).day(12).hour(23).minute(14).second(30).build().unwrap(), vocation: "ENGINEER".to_string(), address: Address { number: 9303, street: "Mele Circle".to_string(), city: "Tobihbo".to_string(), }, }, Person { person_id: "8732762874".to_string(), firstname: "Toni".to_string(), lastname: "Jones".to_string(), dateofbirth: DateTime::builder().year(1991).month(11).day(23).hour(16).minute(53).second(56).build().unwrap(), vocation: "POLITICIAN".to_string(), address: Address { number: 1, street: "High Street".to_string(), city: "Upper Abbeywoodington".to_string(), }, }, Person { person_id: "7363629563".to_string(), firstname: "Bert".to_string(), lastname: "Gooding".to_string(), dateofbirth: DateTime::builder().year(1941).month(4).day(7).hour(22).minute(11).second(52).build().unwrap(), vocation: "FLORIST".to_string(), address: Address { number: 13, street: "Upper Bold Road".to_string(), city: "Redringtonville".to_string(), }, }, Person { person_id: "1029648329".to_string(), firstname: "Sophie".to_string(), lastname: "Celements".to_string(), dateofbirth: DateTime::builder().year(1959).month(7).day(6).hour(17).minute(35).second(45).build().unwrap(), vocation: "ENGINEER".to_string(), address: Address { number: 5, street: "Innings Close".to_string(), city: "Basilbridge".to_string(), }, }, Person { person_id: "7363626383".to_string(), firstname: "Carl".to_string(), lastname: "Simmons".to_string(), dateofbirth: DateTime::builder().year(1998).month(12).day(26).hour(13).minute(13).second(55).build().unwrap(), vocation: "ENGINEER".to_string(), address: Address { number: 187, street: "Hillside Road".to_string(), city: "Kenningford".to_string(), }, }, ]; persons.insert_many(data).await?;
Crea la aplicación de plantilla
Antes de comenzar a seguir un tutorial de agregación, debe configurar una nueva aplicación de Scala. Puede usar esta aplicación para conectarse a una implementación de MongoDB, insertar datos de muestra en MongoDB y ejecutar la canalización de agregación.
Tip
Para aprender cómo instalar el controlador y conectarte a MongoDB, consulta la Guía para comenzar con el controlador de Scala.
Para obtener más información sobre cómo realizar agregaciones en el Scala Driver, consulta la Guía de agregación.
Después de instalar el controlador, crea un archivo llamado AggTutorial.scala. Pega el siguiente código en este archivo para crear una plantilla de aplicación para los tutoriales de agregación.
Importante
En el siguiente código, lee los comentarios del código para encontrar las secciones del código que debes modificar para el tutorial que estás siguiendo.
Si intenta ejecutar el código sin hacer ningún cambio, se encontrará con un error de conexión.
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, se debe reemplazar el marcador de posición de la cadena de conexión con la cadena de conexión de la implementación.
Tip
Para aprender a localizar la cadena de conexión de la implementación, se debe consultar el paso Crear una cadena de conexión de la guía de inicio del driver de Scala.
Por ejemplo, si la cadena de conexión es "mongodb+srv://mongodb-example:27017", la asignación de cadena de conexión se asemeja a lo siguiente:
val uri = "mongodb+srv://mongodb-example:27017"
Crear la colección
Este ejemplo utiliza una colección persons, que contiene documentos que describen el nombre, la fecha de nacimiento, la ocupación y otros detalles de cada persona. La agregación selecciona documentos basándose en si los valores de sus campos cumplen con los criterios especificados.
Para crear la colección persons e insertar los datos de muestra, se debe añadir el siguiente código a la aplicación:
val persons = aggDB.getCollection("persons") persons.deleteMany(Filters.empty()).subscribe( _ => {}, e => println("Error: " + e.getMessage), ) val dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss") persons.insertMany(Seq( Document( "person_id" -> "6392529400", "firstname" -> "Elise", "lastname" -> "Smith", "dateofbirth" -> dateFormat.parse("1972-01-13T09:32:07"), "vocation" -> "ENGINEER", "address" -> Document( "number" -> 5625, "street" -> "Tipa Circle", "city" -> "Wojzinmoj" ) ), Document( "person_id" -> "1723338115", "firstname" -> "Olive", "lastname" -> "Ranieri", "dateofbirth" -> dateFormat.parse("1985-05-12T23:14:30"), "gender" -> "FEMALE", "vocation" -> "ENGINEER", "address" -> Document( "number" -> 9303, "street" -> "Mele Circle", "city" -> "Tobihbo" ) ), Document( "person_id" -> "8732762874", "firstname" -> "Toni", "lastname" -> "Jones", "dateofbirth" -> dateFormat.parse("1991-11-23T16:53:56"), "vocation" -> "POLITICIAN", "address" -> Document( "number" -> 1, "street" -> "High Street", "city" -> "Upper Abbeywoodington" ) ), Document( "person_id" -> "7363629563", "firstname" -> "Bert", "lastname" -> "Gooding", "dateofbirth" -> dateFormat.parse("1941-04-07T22:11:52"), "vocation" -> "FLORIST", "address" -> Document( "number" -> 13, "street" -> "Upper Bold Road", "city" -> "Redringtonville" ) ), Document( "person_id" -> "1029648329", "firstname" -> "Sophie", "lastname" -> "Celements", "dateofbirth" -> dateFormat.parse("1959-07-06T17:35:45"), "vocation" -> "ENGINEER", "address" -> Document( "number" -> 5, "street" -> "Innings Close", "city" -> "Basilbridge" ) ), Document( "person_id" -> "7363626383", "firstname" -> "Carl", "lastname" -> "Simmons", "dateofbirth" -> dateFormat.parse("1998-12-26T13:13:55"), "vocation" -> "ENGINEER", "address" -> Document( "number" -> 187, "street" -> "Hillside Road", "city" -> "Kenningford" ) ) )).subscribe( _ => {}, e => println("Error: " + e.getMessage), )
Pasos
Los siguientes pasos demuestran cómo crear y ejecutar un pipeline de agregación para filtrar un subconjunto específico de documentos.
Ejecute la canalización de agregación.
db.persons.aggregate( [ // Stage 1: Match documents of people who are engineers { $match: { "vocation": "ENGINEER" } }, // Stage 2: Sort documents from youngest to oldest { $sort: { "dateofbirth": -1 } }, // Stage 3: Limit the results to 3 documents { $limit: 3 }, // Stage 4: Remove unneeded fields { $unset: [ "_id", "address"] } ] )
Interpretar los resultados de la agregación.
Los resultados agregados contienen tres documentos. Los documentos representan a las tres personas más jóvenes con el vocation de ENGINEER, ordenadas del menor al mayor. Los resultados omiten los campos _id y address.
{ person_id: '7363626383', firstname: 'Carl', lastname: 'Simmons', dateofbirth: ISODate("1998-12-26T13:13:55.000Z"), vocation: 'ENGINEER' } { person_id: '1723338115', firstname: 'Olive', lastname: 'Ranieri', dateofbirth: ISODate("1985-05-12T23:14:30.000Z"), gender: 'FEMALE', vocation: 'ENGINEER' } { person_id: '6392529400', firstname: 'Elise', lastname: 'Smith', dateofbirth: ISODate("1972-01-13T09:32:07.000Z"), vocation: 'ENGINEER' }
Añade una etapa de coincidencia para ingenieros.
En el pipeline, se debe crear una etapa $match que encuentre documentos en los que el valor del campo vocation sea "ENGINEER":
"{", "$match", "{", "vocation", BCON_UTF8("ENGINEER"), "}", "}",
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, crea una etapa $sort que ordene los documentos en orden descendente por el campo dateofbirth para listar primero a las personas más jóvenes:
"{", "$sort", "{", "dateofbirth", BCON_INT32(-1), "}", "}",
Agrega una etapa de límite para ver solo tres resultados.
Luego, crea una $limit etapa en el pipeline para generar solo los tres primeros documentos de los resultados.
"{", "$limit", BCON_INT32(3), "}",
Añade una etapa de Remoción para remover campos innecesarios
Por último, crea una etapa $unset. La etapa $unset remueve los campos innecesarios de los documentos de resultado:
"{", "$unset", "[", BCON_UTF8("_id"), BCON_UTF8("address"), "]", "}",
Tip
Utilice el operador $unset en lugar de $project para evitar modificar la canalización de agregación si se agregan documentos con campos diferentes a la colección.
Ejecute la canalización de agregación.
Se debe agregar el siguiente código al final de la aplicación para realizar la agregación en la colección persons:
mongoc_cursor_t *results = mongoc_collection_aggregate(persons, MONGOC_QUERY_NONE, pipeline, NULL, NULL); bson_destroy(pipeline);
Asegúrese de limpiar los recursos de la colección añadiendo la siguiente línea a sus instrucciones de limpieza:
mongoc_collection_destroy(persons);
Finalmente, se deben ejecutar los siguientes comandos en el shell para generar y ejecutar el ejecutable:
gcc -o aggc agg-tutorial.c $(pkg-config --libs --cflags libmongoc-1.0) ./aggc
Tip
Si encuentras errores de conexión al ejecutar los comandos anteriores en una sola llamada, puedes ejecutarlos por separado.
Interpretar los resultados de la agregación.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y address.
{ "person_id" : "7363626383", "firstname" : "Carl", "lastname" : "Simmons", "dateofbirth" : { "$date" : { "$numberLong" : "915250045000" } }, "vocation" : "ENGINEER" } { "person_id" : "6392529400", "firstname" : "Elise", "lastname" : "Smith", "dateofbirth" : { "$date" : { "$numberLong" : "653616727000" } }, "vocation" : "ENGINEER" } { "person_id" : "1723338115", "firstname" : "Olive", "lastname" : "Ranieri", "dateofbirth" : { "$date" : { "$numberLong" : "485113500000" } }, "gender" : "FEMALE", "vocation" : "ENGINEER" }
Añade una etapa de coincidencia para ingenieros.
Primero, añada una etapa $match que encuentre documentos en los que el valor del campo vocation sea "ENGINEER":
pipeline.match(bsoncxx::from_json(R"({ "vocation": "ENGINEER" })"));
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, añade una etapa de $sort que ordene los documentos en orden descendente por el campo dateofbirth para listar primero a las personas más jóvenes:
pipeline.sort(bsoncxx::from_json(R"({ "dateofbirth": -1 })"));
Agrega una etapa de límite para ver solo tres resultados.
A continuación, añade una etapa $limit al pipeline para generar solo los tres primeros documentos de los resultados.
pipeline.limit(3);
Añade una etapa de Remoción para remover campos innecesarios
Por último, añade una etapa $unset. La etapa $unset remueve los campos innecesarios de los documentos de resultado:
pipeline.append_stage(bsoncxx::from_json(R"({ "$unset": ["_id", "address"] })"));
Tip
Utilice el operador $unset en lugar de $project para evitar modificar la canalización de agregación si se agregan documentos con campos diferentes a la colección.
Ejecute la canalización de agregación.
Se debe agregar el siguiente código al final de la aplicación para realizar la agregación en la colección persons:
auto cursor = persons.aggregate(pipeline);
Por último, se deben ajustar los siguientes comandos en el shell para iniciar la aplicación:
c++ --std=c++17 agg-tutorial.cpp $(pkg-config --cflags --libs libmongocxx) -o ./app.out ./app.out
Interpretar los resultados de la agregación.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y address.
{ "person_id" : "7363626383", "firstname" : "Carl", "lastname" : "Simmons", "dateofbirth" : { "$date" : "1999-01-01T00:00:35Z" }, "vocation" : "ENGINEER" } { "person_id" : "1723338115", "firstname" : "Olive", "lastname" : "Ranieri", "dateofbirth" : { "$date" : "1985-05-21T13:14:30Z" }, "gender" : "FEMALE", "vocation" : "ENGINEER" } { "person_id" : "6392529400", "firstname" : "Elise", "lastname" : "Smith", "dateofbirth" : { "$date" : "1970-01-08T04:29:07.927Z" }, "vocation" : "ENGINEER" }
Añade una etapa de coincidencia para ingenieros.
Primero, inicia la agregación en la colección persons y encadena una etapa $match que encuentre documentos en los que el valor del campo Vocation sea "ENGINEER":
var results = persons.Aggregate() .Match(p => p.Vocation == "ENGINEER")
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, añade una etapa de $sort que ordene los documentos en orden descendente por el campo DateOfBirth para listar primero a las personas más jóvenes:
.Sort(Builders<Person>.Sort.Descending(p => p.DateOfBirth))
Agrega una etapa de límite para ver solo tres resultados.
A continuación, añade una etapa $limit al pipeline para generar solo los tres primeros documentos de los resultados.
.Limit(3)
Añade una etapa de proyección para Remover campos innecesarios.
Por último, añada una $project etapa. La etapa $project excluye campos innecesarios de los documentos de resultado:
.Project(Builders<Person>.Projection .Exclude(p => p.Address) .Exclude(p => p.Id) );
Ejecutar la agregación e interpretar los resultados.
Por último, se debe ejecutar la aplicación en el IDE e inspeccionar los resultados.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y Address.
{ "PersonId" : "7363626383", "FirstName" : "Carl", "LastName" : "Simmons", "DateOfBirth" : { "$date" : "1998-12-26T13:13:55Z" }, "Vocation" : "ENGINEER" } { "PersonId" : "1723338115", "FirstName" : "Olive", "LastName" : "Ranieri", "DateOfBirth" : { "$date" : "1985-05-12T23:14:30Z" }, "Gender" : "FEMALE", "Vocation" : "ENGINEER" } { "PersonId" : "6392529400", "FirstName" : "Elise", "LastName" : "Smith", "DateOfBirth" : { "$date" : "1972-01-13T09:32:07Z" }, "Vocation" : "ENGINEER" }
Añade una etapa de coincidencia para ingenieros.
Primero, añada una etapa $match que encuentre documentos en los que el valor del campo vocation sea "ENGINEER":
matchStage := bson.D{{Key: "$match", Value: bson.D{{Key: "vocation", Value: "ENGINEER"}}}}
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, añade una etapa de $sort que ordene los documentos en orden descendente por el campo dateofbirth para listar primero a las personas más jóvenes:
sortStage := bson.D{{Key: "$sort", Value: bson.D{{Key: "dateofbirth", Value: -1}}}}
Agrega una etapa de límite para ver solo tres resultados.
A continuación, añade una etapa $limit al pipeline para generar solo los tres primeros documentos de los resultados.
limitStage := bson.D{{Key: "$limit", Value: 3}}
Añade una etapa de Remoción para remover campos innecesarios
Por último, añade una etapa $unset. La etapa $unset remueve los campos innecesarios de los documentos de resultado:
unsetStage := bson.D{{Key: "$unset", Value: bson.A{"_id", "address"}}}
Tip
Utilice el operador $unset en lugar de $project para evitar modificar la canalización de agregación si se agregan documentos con campos diferentes a la colección.
Ejecute la canalización de agregación.
Se debe agregar el siguiente código al final de la aplicación para realizar la agregación en la colección persons:
pipeline := mongo.Pipeline{matchStage, sortStage, limitStage, unsetStage} cursor, err := persons.Aggregate(context.TODO(), pipeline)
Finalmente, ejecute el siguiente comando en su shell para iniciar su aplicación:
go run agg_tutorial.go
Interpretar los resultados de la agregación.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y address.
{"person_id":"7363626383","firstname":"Carl","lastname":"Simmons","dateofbirth":{"$date":"1998-12-26T13:13:55Z"},"vocation":"ENGINEER"} {"person_id":"1723338115","firstname":"Olive","lastname":"Ranieri","gender":"FEMALE","dateofbirth":{"$date":"1985-05-12T23:14:30Z"},"vocation":"ENGINEER"} {"person_id":"6392529400","firstname":"Elise","lastname":"Smith","dateofbirth":{"$date":"1972-01-13T09:32:07Z"},"vocation":"ENGINEER"}
Añade una etapa de coincidencia para ingenieros.
Primero, añada una etapa $match que encuentre documentos en los que el valor del campo vocation sea "ENGINEER":
pipeline.add(Aggregates.match(Filters.eq("vocation", "ENGINEER")));
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, añade una etapa de $sort que ordene los documentos en orden descendente por el campo dateofbirth para listar primero a las personas más jóvenes:
pipeline.add(Aggregates.sort(Sorts.descending("dateofbirth")));
Agrega una etapa de límite para ver solo tres resultados.
A continuación, añade una etapa $limit al pipeline para generar solo los tres primeros documentos de los resultados.
pipeline.add(Aggregates.limit(3));
Añade una etapa de Remoción para remover campos innecesarios
Por último, añade una etapa $unset. La etapa $unset remueve los campos innecesarios de los documentos de resultado:
pipeline.add(Aggregates.unset("_id", "address"));
Tip
Utilice el operador $unset en lugar de $project para evitar modificar la canalización de agregación si se agregan documentos con campos diferentes a la colección.
Interpretar los resultados de la agregación.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y address.
{"person_id": "7363626383", "firstname": "Carl", "lastname": "Simmons", "dateofbirth": {"$date": "1998-12-26T13:13:55Z"}, "vocation": "ENGINEER"} {"person_id": "1723338115", "firstname": "Olive", "lastname": "Ranieri", "dateofbirth": {"$date": "1985-05-12T23:14:30Z"}, "gender": "FEMALE", "vocation": "ENGINEER"} {"person_id": "6392529400", "firstname": "Elise", "lastname": "Smith", "dateofbirth": {"$date": "1972-01-13T09:32:07Z"}, "vocation": "ENGINEER"}
Añade una etapa de coincidencia para ingenieros.
Primero, añada una etapa $match que encuentre documentos en los que el valor del campo vocation sea "ENGINEER":
pipeline.add(Aggregates.match(Filters.eq(Person::vocation.name, "ENGINEER")))
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, añade una etapa de $sort que ordene los documentos en orden descendente por el campo dateOfBirth para listar primero a las personas más jóvenes:
pipeline.add(Aggregates.sort(Sorts.descending(Person::dateOfBirth.name)))
Agrega una etapa de límite para ver solo tres resultados.
A continuación, añade una etapa $limit al pipeline para generar solo los tres primeros documentos de los resultados.
pipeline.add(Aggregates.limit(3))
Añade una etapa de Remoción para remover campos innecesarios
Por último, añade una etapa $unset. La etapa $unset remueve los campos innecesarios de los documentos de resultado:
pipeline.add(Aggregates.unset("_id", Person::address.name))
Tip
Utilice el operador $unset en lugar de $project para evitar modificar la canalización de agregación si se agregan documentos con campos diferentes a la colección.
Interpretar los resultados de la agregación.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y address.
Document{{personID=7363626383, firstname=Carl, lastname=Simmons, dateOfBirth=Sat Dec 26 08:13:55 EST 1998, vocation=ENGINEER}} Document{{personID=1723338115, firstname=Olive, lastname=Ranieri, dateOfBirth=Sun May 12 19:14:30 EDT 1985, vocation=ENGINEER, gender=FEMALE}} Document{{personID=6392529400, firstname=Elise, lastname=Smith, dateOfBirth=Thu Jan 13 04:32:07 EST 1972, vocation=ENGINEER}}
Añade una etapa de coincidencia para ingenieros.
Primero, añada una etapa $match que encuentre documentos en los que el valor del campo vocation sea "ENGINEER":
pipeline.push({ $match: { vocation: "ENGINEER", }, });
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, añade una etapa de $sort que ordene los documentos en orden descendente por el campo dateofbirth para listar primero a las personas más jóvenes:
pipeline.push({ $sort: { dateofbirth: -1, }, });
Agrega una etapa de límite para ver solo tres resultados.
A continuación, añade una etapa $limit al pipeline para generar solo los tres primeros documentos de los resultados.
pipeline.push({ $limit: 3, });
Añade una etapa de Remoción para remover campos innecesarios
Por último, añade una etapa $unset. La etapa $unset remueve los campos innecesarios de los documentos de resultado:
pipeline.push({ $unset: ["_id", "address"], });
Tip
Utilice el operador $unset en lugar de $project para evitar modificar la canalización de agregación si se agregan documentos con campos diferentes a la colección.
Ejecute la canalización de agregación.
Se debe agregar el siguiente código al final de la aplicación para realizar la agregación en la colección persons:
const aggregationResult = await persons.aggregate(pipeline);
Finalmente, ejecute el siguiente comando en su shell para iniciar su aplicación:
node agg_tutorial.js
Interpretar los resultados de la agregación.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y address.
{ person_id: '7363626383', firstname: 'Carl', lastname: 'Simmons', dateofbirth: 1998-12-26T13:13:55.000Z, vocation: 'ENGINEER' } { person_id: '1723338115', firstname: 'Olive', lastname: 'Ranieri', dateofbirth: 1985-05-12T23:14:30.000Z, gender: 'FEMALE', vocation: 'ENGINEER' } { person_id: '6392529400', firstname: 'Elise', lastname: 'Smith', dateofbirth: 1972-01-13T09:32:07.000Z, vocation: 'ENGINEER' }
Añade una etapa de coincidencia para ingenieros.
En la instancia de Pipeline, se debe crear una etapa de $match que encuentre documentos en los que el valor del campo vocation sea "ENGINEER":
Stage::match(vocation: 'ENGINEER'),
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, crea una etapa $sort que ordene los documentos en orden descendente por el campo dateofbirth para listar primero a las personas más jóvenes:
Stage::sort(dateofbirth: Sort::Desc),
Agrega una etapa de límite para ver solo tres resultados.
Luego, crea una $limit etapa en el pipeline para generar solo los tres primeros documentos de los resultados.
Stage::limit(3),
Añade una etapa de Remoción para remover campos innecesarios
Por último, crea una etapa $unset. La etapa $unset remueve los campos innecesarios de los documentos de resultado:
Stage::unset('_id', 'address')
Tip
Utilice el operador $unset en lugar de $project para evitar modificar la canalización de agregación si se agregan documentos con campos diferentes a la colección.
Interpretar los resultados de la agregación.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y address.
{ "person_id": "7363626383", "firstname": "Carl", "lastname": "Simmons", "dateofbirth": { "$date": { "$numberLong": "914678035000" } }, "vocation": "ENGINEER" } { "person_id": "1723338115", "firstname": "Olive", "lastname": "Ranieri", "gender": "FEMALE", "dateofbirth": { "$date": { "$numberLong": "484787670000" } }, "vocation": "ENGINEER" } { "person_id": "6392529400", "firstname": "Elise", "lastname": "Smith", "dateofbirth": { "$date": { "$numberLong": "64143127000" } }, "vocation": "ENGINEER" }
Añade una etapa de coincidencia para ingenieros.
En la instancia de Pipeline, se debe crear una etapa de $match que encuentre documentos en los que el valor del campo vocation sea "ENGINEER":
pipeline.append({"$match": {"vocation": "ENGINEER"}})
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, crea una etapa $sort que ordene los documentos en orden descendente por el campo dateofbirth para listar primero a las personas más jóvenes:
pipeline.append({"$sort": {"dateofbirth": -1}})
Agrega una etapa de límite para ver solo tres resultados.
Luego, crea una $limit etapa en el pipeline para generar solo los tres primeros documentos de los resultados.
pipeline.append({"$limit": 3})
Añade una etapa de Remoción para remover campos innecesarios
Por último, crea una etapa $unset. La etapa $unset remueve los campos innecesarios de los documentos de resultado:
pipeline.append({"$unset": ["_id", "address"]})
Tip
Utilice el operador $unset en lugar de $project para evitar modificar la canalización de agregación si se agregan documentos con campos diferentes a la colección.
Ejecute la canalización de agregación.
Se debe agregar el siguiente código al final de la aplicación para realizar la agregación en la colección persons:
aggregation_result = person_coll.aggregate(pipeline)
Finalmente, ejecute el siguiente comando en su shell para iniciar su aplicación:
python3 agg_tutorial.py
Interpretar los resultados de la agregación.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y address.
{'person_id': '7363626383', 'firstname': 'Carl', 'lastname': 'Simmons', 'dateofbirth': datetime.datetime(1998, 12, 26, 13, 13, 55), 'vocation': 'ENGINEER'} {'person_id': '1723338115', 'firstname': 'Olive', 'lastname': 'Ranieri', 'dateofbirth': datetime.datetime(1985, 5, 12, 23, 14, 30), 'gender': 'FEMALE', 'vocation': 'ENGINEER'} {'person_id': '6392529400', 'firstname': 'Elise', 'lastname': 'Smith', 'dateofbirth': datetime.datetime(1972, 1, 13, 9, 32, 7), 'vocation': 'ENGINEER'}
Añade una etapa de coincidencia para ingenieros.
Primero, añada una etapa $match que encuentre documentos en los que el valor del campo vocation sea "ENGINEER":
{ "$match": { "vocation": "ENGINEER" } },
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, añade una etapa de $sort que ordene los documentos en orden descendente por el campo dateofbirth para listar primero a las personas más jóvenes:
{ "$sort": { "dateofbirth": -1 } },
Agrega una etapa de límite para ver solo tres resultados.
A continuación, añade una etapa $limit al pipeline para generar solo los tres primeros documentos de los resultados.
{ "$limit": 3 },
Añade una etapa de Remoción para remover campos innecesarios
Por último, añade una etapa $unset. La etapa $unset remueve los campos innecesarios de los documentos de resultado:
{ "$unset": ["_id", "address"] },
Tip
Utilice el operador $unset en lugar de $project para evitar modificar la canalización de agregación si se agregan documentos con campos diferentes a la colección.
Ejecute la canalización de agregación.
Se debe agregar el siguiente código al final de la aplicación para realizar la agregación en la colección persons:
aggregation_result = persons.aggregate(pipeline)
Finalmente, ejecute el siguiente comando en su shell para iniciar su aplicación:
node agg_tutorial.rb
Interpretar los resultados de la agregación.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y address.
{"person_id"=>"7363626383", "firstname"=>"Carl", "lastname"=>"Simmons", "dateofbirth"=>1998-12-26 13:13:55 UTC, "vocation"=>"ENGINEER"} {"person_id"=>"1723338115", "firstname"=>"Olive", "lastname"=>"Ranieri", "dateofbirth"=>1985-05-12 23:14:30 UTC, "gender"=>"FEMALE", "vocation"=>"ENGINEER"} {"person_id"=>"6392529400", "firstname"=>"Elise", "lastname"=>"Smith", "dateofbirth"=>1972-01-13 09:32:07 UTC, "vocation"=>"ENGINEER"}
Añade una etapa de coincidencia para ingenieros.
Primero, añada una etapa $match que encuentre documentos en los que el valor del campo vocation sea "ENGINEER":
pipeline.push(doc! { "$match": { "vocation": "ENGINEER" } });
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, añade una etapa de $sort que ordene los documentos en orden descendente por el campo dateofbirth para listar primero a las personas más jóvenes:
pipeline.push(doc! { "$sort": { "dateofbirth": -1 } });
Agrega una etapa de límite para ver solo tres resultados.
A continuación, añade una etapa $limit al pipeline para generar solo los tres primeros documentos de los resultados.
pipeline.push(doc! { "$limit": 3 });
Añade una etapa de Remoción para remover campos innecesarios
Por último, añade una etapa $unset. La etapa $unset remueve los campos innecesarios de los documentos de resultado:
pipeline.push(doc! { "$unset": ["_id", "address"] });
Tip
Utilice el operador $unset en lugar de $project para evitar modificar la canalización de agregación si se agregan documentos con campos diferentes a la colección.
Interpretar los resultados de la agregación.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y address.
Document({"person_id": String("7363626383"), "firstname": String("Carl"), "lastname": String("Simmons"), "dateofbirth": DateTime(1998-12-26 13:13:55.0 +00:00:00), "vocation": String("ENGINEER")}) Document({"person_id": String("1723338115"), "firstname": String("Olive"), "lastname": String("Ranieri"), "gender": String("FEMALE"), "dateofbirth": DateTime(1985-05-12 23:14:30.0 +00:00:00), "vocation": String("ENGINEER")}) Document({"person_id": String("6392529400"), "firstname": String("Elise"), "lastname": String("Smith"), "dateofbirth": DateTime(1972-01-13 9:32:07.0 +00:00:00), "vocation": String("ENGINEER")})
Añade una etapa de coincidencia para ingenieros.
Primero, añada una etapa $match que encuentre documentos en los que el valor del campo vocation sea "ENGINEER":
Aggregates.filter(Filters.equal("vocation", "ENGINEER")),
Añade una etapa de clasificación para ordenar de menor a mayor edad.
A continuación, añade una etapa de $sort que ordene los documentos en orden descendente por el campo dateofbirth para listar primero a las personas más jóvenes:
Aggregates.sort(Sorts.descending("dateofbirth")),
Agrega una etapa de límite para ver solo tres resultados.
A continuación, añade una etapa $limit al pipeline para generar solo los tres primeros documentos de los resultados.
Aggregates.limit(3),
Añade una etapa de Remoción para remover campos innecesarios
Por último, añade una etapa $unset. La etapa $unset remueve los campos innecesarios de los documentos de resultado:
Aggregates.unset("_id", "address")
Tip
Utilice el operador $unset en lugar de $project para evitar modificar la canalización de agregación si se agregan documentos con campos diferentes a la colección.
Ejecute la canalización de agregación.
Se debe agregar el siguiente código al final de la aplicación para realizar la agregación en la colección persons:
persons.aggregate(pipeline) .subscribe((doc: Document) => println(doc.toJson()), (e: Throwable) => println(s"Error: $e"))
Finalmente, ejecute la aplicación en su IDE.
Interpretar los resultados de la agregación.
El resultado agregado contiene tres documentos. Los documentos representan a las tres personas más jóvenes con la vocación de "ENGINEER", ordenadas de menor a mayor. Los resultados omiten los campos _id y address.
{"person_id": "7363626383", "firstname": "Carl", "lastname": "Simmons", "dateofbirth": {"$date": "1998-12-26T18:13:55Z"}, "vocation": "ENGINEER"} {"person_id": "1723338115", "firstname": "Olive", "lastname": "Ranieri", "dateofbirth": {"$date": "1985-05-13T03:14:30Z"}, "gender": "FEMALE", "vocation": "ENGINEER"} {"person_id": "6392529400", "firstname": "Elise", "lastname": "Smith", "dateofbirth": {"$date": "1972-01-13T14:32:07Z"}, "vocation": "ENGINEER"}