pub async fn aggregate<T>(
    pipeline: impl IntoIterator<Item = Document>,
    options: impl Into<Option<AggregateOptions>>,
    collection_name: &str,
    db: &Database
) -> Result<Vec<T>, Error> where
    for<'a> T: DeserializeOwned + Unpin + Send + Sync