Een mongodb Cursor
implementeert Stream
van de futures
krat
. Dit wordt vermeld in de docs
:
Ik zou eigenlijk aanraden om de try_collect()
. te gebruiken functie van de TryStreamExt
eigenschap om een Result<Vec<Document>>
. te krijgen in plaats van. Dan kun je unwrap_or_else()
. gebruiken om de lijst terug te sturen. Je moet ook de collection_with_type()
. gebruiken methode om de verzameling op te halen, zodat uw resultaten automatisch worden gedeserialiseerd naar het juiste type in plaats van alleen Document
(zorg er wel voor dat het Debug
implementeert , Serialize
en Deserialize
).
Hier is een werkend voorbeeld
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![])
}