Beispielcode in Rust: Verbindung zu MongoDB

Um eine Verbindung zu MongoDB in Rust herzustellen, benötigst du die Bibliotheken mongodb, tokio und serde. Stelle sicher, dass du die entsprechenden Versionen in deiner Cargo.toml-Datei angegeben hast und dass deine lokale MongoDB-Instanz auf localhost:27017 läuft.

Hier ist ein Beispielcode, der eine Verbindung zu MongoDB herstellt, eine Datenbank und eine Collection erstellt und einige grundlegende Operationen ausführt.

Das Beispiel legt eine Datenbank namens „test_db“ und eine Collection namens „persons“ an und fügt zwei Personen-Dokumente („John“ und „Alice“) ein. Es sucht dann nach einem Dokument mit dem Namen „John“ und gibt es aus.

Cargo.toml

[package]
name = "mongodb_test"
version = "0.1.0"
edition = "2021"

[dependencies]
tokio = { version = "1", features = ["full"] }
mongodb = "2.6.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"

main.rs

use mongodb::{Client, Collection};
use mongodb::bson::{doc, oid::ObjectId};
use serde::{Serialize, Deserialize};

// Eine Datenstruktur, die deine Dokumente in der MongoDB-Collection darstellt
#[derive(Debug, Serialize, Deserialize)]
struct Person {
    #[serde(rename = "_id")]
    id: ObjectId,
    name: String,
    age: i32,
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Verbindung zur MongoDB-Datenbank herstellen
    let client = Client::with_uri_str("mongodb://localhost:27017").await?;
    
    // Datenbank und Collection auswählen
    let db = client.database("test_db");
    let collection: Collection<Person> = db.collection("persons");
    
    // Beispiel-Daten erstellen
    let person1 = Person {
        id: ObjectId::new(),
        name: String::from("John"),
        age: 30,
    };
    
    let person2 = Person {
        id: ObjectId::new(),
        name: String::from("Alice"),
        age: 25,
    };

    // Einfügen von Dokumenten in die Collection
    collection.insert_one(person1, None).await?;
    collection.insert_one(person2, None).await?;

    // Suchen von Dokumenten in der Collection
    let filter = doc! { "name": "John" };
    let result = collection.find_one(filter, None).await?;

    match result {
        Some(person) => println!("Found person: {:?}", person),
        None => println!("Person not found"),
    }

    Ok(())
}

cargo run

    Finished dev [unoptimized + debuginfo] target(s) in 0.30s
     Running `target/debug/mongodb_test`
Found person: Person { id: ObjectId("64cc510be2d7f74059c4f244"), name: "John", age: 30 }

Siehe auch

docs.rs Crate mongodb
serde.rs Serde framework
tokio.rs Tokio runtime
mongodb.com Download Compass, GUI for MongoDB