Struct mongodb::SessionCursor [−][src]
pub struct SessionCursor<T> where
T: DeserializeOwned + Unpin, { /* fields omitted */ }
Expand description
A SessionCursor
is a cursor that was created with a ClientSession
that must be iterated
using one. To iterate, use SessionCursor::next
or retrieve a SessionCursorStream
using
SessionCursor::stream
:
// iterate using next() let mut cursor = coll.find_with_session(None, None, &mut session).await?; while let Some(doc) = cursor.next(&mut session).await.transpose()? { println!("{}", doc) } // iterate using `Stream`: use futures::stream::TryStreamExt; let mut cursor = coll.find_with_session(None, None, &mut session).await?; let results: Vec<_> = cursor.stream(&mut session).try_collect().await?;
Implementations
impl<T> SessionCursor<T> where
T: DeserializeOwned + Unpin,
[src]
impl<T> SessionCursor<T> where
T: DeserializeOwned + Unpin,
[src]pub fn stream<'session>(
&mut self,
session: &'session mut ClientSession
) -> SessionCursorStream<'_, 'session, T>
[src]
pub fn stream<'session>(
&mut self,
session: &'session mut ClientSession
) -> SessionCursorStream<'_, 'session, T>
[src]Retrieves a SessionCursorStream
to iterate this cursor. The session provided must be the
same session used to create the cursor.
Note that the borrow checker will not allow the session to be reused in between iterations
of this stream. In order to do that, either use SessionCursor::next
instead or drop
the stream before using the session.
use futures::stream::TryStreamExt; // iterate over the results let mut cursor = coll.find_with_session(doc! { "x": 1 }, None, &mut session).await?; while let Some(doc) = cursor.stream(&mut session).try_next().await? { println!("{}", doc); } // collect the results let mut cursor1 = coll.find_with_session(doc! { "x": 1 }, None, &mut session).await?; let v: Vec<Document> = cursor1.stream(&mut session).try_collect().await?; // use session between iterations let mut cursor2 = coll.find_with_session(doc! { "x": 1 }, None, &mut session).await?; loop { let doc = match cursor2.stream(&mut session).try_next().await? { Some(d) => d, None => break, }; other_coll.insert_one_with_session(doc, None, &mut session).await?; }
pub async fn next(&mut self, session: &mut ClientSession) -> Option<Result<T>>
[src]
pub async fn next(&mut self, session: &mut ClientSession) -> Option<Result<T>>
[src]Retrieve the next result from the cursor. The session provided must be the same session used to create the cursor.
Use this method when the session needs to be used again between iterations or when the added
functionality of Stream
is not needed.
let mut cursor = coll.find_with_session(doc! { "x": 1 }, None, &mut session).await?; while let Some(doc) = cursor.next(&mut session).await.transpose()? { other_coll.insert_one_with_session(doc, None, &mut session).await?; }
Trait Implementations
impl<T: Debug> Debug for SessionCursor<T> where
T: DeserializeOwned + Unpin,
[src]
impl<T: Debug> Debug for SessionCursor<T> where
T: DeserializeOwned + Unpin,
[src]impl<T> Drop for SessionCursor<T> where
T: DeserializeOwned + Unpin,
[src]
impl<T> Drop for SessionCursor<T> where
T: DeserializeOwned + Unpin,
[src]Auto Trait Implementations
impl<T> !RefUnwindSafe for SessionCursor<T>
impl<T> Send for SessionCursor<T> where
T: Send,
T: Send,
impl<T> Sync for SessionCursor<T> where
T: Sync,
T: Sync,
impl<T> Unpin for SessionCursor<T>
impl<T> !UnwindSafe for SessionCursor<T>
Blanket Implementations
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]pub fn borrow_mut(&mut self) -> &mut T
[src]
pub fn borrow_mut(&mut self) -> &mut T
[src]Mutably borrows from an owned value. Read more
impl<T> Instrument for T
[src]
impl<T> Instrument for T
[src]fn instrument(self, span: Span) -> Instrumented<Self>
[src]
fn instrument(self, span: Span) -> Instrumented<Self>
[src]Instruments this type with the provided Span
, returning an
Instrumented
wrapper. Read more
fn in_current_span(self) -> Instrumented<Self>
[src]
fn in_current_span(self) -> Instrumented<Self>
[src]impl<T> Same<T> for T
impl<T> Same<T> for T
type Output = T
type Output = T
Should always be Self
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,