MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment obtenir une collection de documents à partir du curseur mongodb?

Un Cursor mongodb implémente Stream des futures caisse . Ceci est mentionné dans la docs :

Je recommanderais en fait d'utiliser le try_collect() fonction de TryStreamExt trait pour obtenir un Result<Vec<Document>> Au lieu. Ensuite, vous pouvez utiliser unwrap_or_else() pour retourner la liste. Vous devez également utiliser le collection_with_type() méthode pour obtenir la collection afin que vos résultats soient automatiquement désérialisés dans le type approprié au lieu de simplement Document (assurez-vous simplement qu'il implémente Debug , Serialize et Deserialize ).

Voici un exemple de travail

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![])
}