MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie bekomme ich eine Sammlung von Dokumenten vom Mongodb-Cursor?

Ein mongodb Cursor implementiert Stream aus den futures Kiste . Dies wird in den Dokumenten erwähnt :

Ich würde tatsächlich empfehlen, try_collect() zu verwenden Funktion aus TryStreamExt , um ein Result<Vec<Document>> zu erhalten stattdessen. Dann können Sie unwrap_or_else() verwenden um die Liste zurückzugeben. Sie sollten auch collection_with_type() verwenden -Methode, um die Sammlung abzurufen, sodass Ihre Ergebnisse automatisch in den richtigen Typ deserialisiert werden und nicht nur in Document (Stellen Sie einfach sicher, dass es Debug implementiert , Serialize und Deserialize ).

Hier ist ein funktionierendes Beispiel

use futures::TryStreamExt;
use mongodb::Client;
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
struct Vehicle {
    id: String,
    name: String,
}

async fn list_all() -> Vec<Vehicle> {
    let client = Client::with_uri_str("mongodb://example.com").await.unwrap();
    let database = client.database("test");
    let collection = database.collection_with_type::<Vehicle>("vehicles");
    let cursor = match collection.find(None, None).await {
        Ok(cursor) => cursor,
        Err(_) => return vec![],
    };

    cursor.try_collect().await.unwrap_or_else(|_| vec![])
}