sql >> Database >  >> NoSQL >> MongoDB

Hoe krijg ik een verzameling documenten van de mongodb-cursor?

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



  1. Kan de MongoDB WiredTiger-engine worden gebruikt voor vooraf geaggregeerde rapporten? (vergelijkbaar met MMAPv1)

  2. Microsoft.Extensions.Caching.Redis selecteer een andere database dan db0

  3. Rails g werkt niet voor mongoïde commando's

  4. Hoe exporteer ik een object dat pas beschikbaar komt in een asynchrone callback?