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