Struct mongodb::Collection
source · pub struct Collection<T>{ /* private fields */ }
Expand description
Collection
is the client-side abstraction of a MongoDB Collection. It can be used to
perform collection-level operations such as CRUD operations. A Collection
can be obtained
through a Database
by calling either
Database::collection
or
Database::collection_with_options
.
A Collection
can be parameterized with any type that implements the
Serialize
and Deserialize
traits from the serde
crate. This includes but
is not limited to just Document
. The various methods that accept or return instances of the
documents in the collection will accept/return instances of the generic parameter (e.g.
Collection::insert_one
accepts it as an argument, Collection::find_one
returns an
Option
of it). It is recommended to define types that model your data which you can
parameterize your Collection
s with instead of Document
, since doing so eliminates a lot of
boilerplate deserialization code and is often more performant.
Collection
uses std::sync::Arc
internally,
so it can safely be shared across threads or async tasks.
§Example
use serde::{Deserialize, Serialize};
/// Define a type that models our data.
#[derive(Clone, Debug, Deserialize, Serialize)]
struct Item {
id: u32,
}
// Parameterize our collection with the model.
let coll = client.database("items").collection::<Item>("in_stock");
for i in 0..5 {
let coll_ref = coll.clone();
// Spawn several tasks that operate on the same collection concurrently.
tokio::task::spawn(async move {
// Perform operations with `coll_ref` that work with directly our model.
coll_ref.insert_one(Item { id: i }).await;
});
}
Implementations§
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn aggregate(
&self,
pipeline: impl IntoIterator<Item = Document>,
) -> Aggregate<'_>
pub fn aggregate( &self, pipeline: impl IntoIterator<Item = Document>, ) -> Aggregate<'_>
Runs an aggregation operation.
See the documentation here for more information on aggregations.
await
will return Result<Cursor<Document>>
. If a ClientSession
was provided, the
returned cursor will be a SessionCursor
. If with_type
was
called, the returned cursor will be generic over the T
specified.
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn estimated_document_count(&self) -> EstimatedDocumentCount<'_>
pub fn estimated_document_count(&self) -> EstimatedDocumentCount<'_>
Estimates the number of documents in the collection using collection metadata.
Due to an oversight in versions 5.0.0 - 5.0.7 of MongoDB, the count
server command,
which estimatedDocumentCount
uses in its implementation, was not included in v1 of the
Stable API. Users of the Stable API with estimatedDocumentCount
are recommended to
upgrade their cluster to 5.0.8+ or set
ServerApi::strict
to false to avoid encountering
errors.
For more information on the behavior of the count
server command, see
Count: Behavior.
sourcepub fn count_documents(&self, filter: Document) -> CountDocuments<'_>
pub fn count_documents(&self, filter: Document) -> CountDocuments<'_>
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn create_index(&self, index: IndexModel) -> CreateIndex<'_>
pub fn create_index(&self, index: IndexModel) -> CreateIndex<'_>
Creates the given index on this collection.
await
will return Result<CreateIndexResult>
.
sourcepub fn create_indexes(
&self,
indexes: impl IntoIterator<Item = IndexModel>,
) -> CreateIndex<'_, Multiple>
pub fn create_indexes( &self, indexes: impl IntoIterator<Item = IndexModel>, ) -> CreateIndex<'_, Multiple>
Creates the given indexes on this collection.
await
will return Result<CreateIndexesResult>
.
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn delete_one(&self, query: Document) -> Delete<'_>
pub fn delete_one(&self, query: Document) -> Delete<'_>
Deletes up to one document found matching query
.
This operation will retry once upon failure if the connection and encountered error support retryability. See the documentation here for more information on retryable writes.
await
will return Result<DeleteResult>
.
sourcepub fn delete_many(&self, query: Document) -> Delete<'_>
pub fn delete_many(&self, query: Document) -> Delete<'_>
Deletes all documents stored in the collection matching query
.
await
will return Result<DeleteResult>
.
source§impl<T> Collection<T>
impl<T> Collection<T>
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn drop(&self) -> DropCollection<'_>
pub fn drop(&self) -> DropCollection<'_>
Drops the collection, deleting all data and indexes stored in it.
await
will return Result<()>
.
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn drop_index(&self, name: impl AsRef<str>) -> DropIndex<'_>
pub fn drop_index(&self, name: impl AsRef<str>) -> DropIndex<'_>
Drops the index specified by name
from this collection.
await
will return Result<()>
.
sourcepub fn drop_indexes(&self) -> DropIndex<'_>
pub fn drop_indexes(&self) -> DropIndex<'_>
Drops all indexes associated with this collection.
await
will return Result<()>
.
source§impl<T: Send + Sync> Collection<T>
impl<T: Send + Sync> Collection<T>
source§impl<T: DeserializeOwned + Send + Sync> Collection<T>
impl<T: DeserializeOwned + Send + Sync> Collection<T>
source§impl<T: DeserializeOwned + Send + Sync> Collection<T>
impl<T: DeserializeOwned + Send + Sync> Collection<T>
sourcepub fn find_one_and_delete(&self, filter: Document) -> FindOneAndDelete<'_, T>
pub fn find_one_and_delete(&self, filter: Document) -> FindOneAndDelete<'_, T>
sourcepub fn find_one_and_update(
&self,
filter: Document,
update: impl Into<UpdateModifications>,
) -> FindOneAndUpdate<'_, T>
pub fn find_one_and_update( &self, filter: Document, update: impl Into<UpdateModifications>, ) -> FindOneAndUpdate<'_, T>
Atomically finds up to one document in the collection matching filter
and updates it.
Both Document
and Vec<Document>
implement Into<UpdateModifications>
, so either can be
passed in place of constructing the enum case. Note: pipeline updates are only supported
in MongoDB 4.2+.
This operation will retry once upon failure if the connection and encountered error support retryability. See the documentation here for more information on retryable writes.
source§impl<T: Serialize + DeserializeOwned + Send + Sync> Collection<T>
impl<T: Serialize + DeserializeOwned + Send + Sync> Collection<T>
sourcepub fn find_one_and_replace(
&self,
filter: Document,
replacement: impl Borrow<T>,
) -> FindOneAndReplace<'_, T>
pub fn find_one_and_replace( &self, filter: Document, replacement: impl Borrow<T>, ) -> FindOneAndReplace<'_, T>
Atomically finds up to one document in the collection matching filter
and replaces it with
replacement
.
This operation will retry once upon failure if the connection and encountered error support retryability. See the documentation here for more information on retryable writes.
source§impl<T: Serialize + Send + Sync> Collection<T>
impl<T: Serialize + Send + Sync> Collection<T>
sourcepub fn insert_many(
&self,
docs: impl IntoIterator<Item = impl Borrow<T>>,
) -> InsertMany<'_>
pub fn insert_many( &self, docs: impl IntoIterator<Item = impl Borrow<T>>, ) -> InsertMany<'_>
Inserts the data in docs
into the collection.
Note that this method accepts both owned and borrowed values, so the input documents do not need to be cloned in order to be passed in.
This operation will retry once upon failure if the connection and encountered error support retryability. See the documentation here for more information on retryable writes.
await
will return Result<InsertManyResult>
.
source§impl<T: Serialize + Send + Sync> Collection<T>
impl<T: Serialize + Send + Sync> Collection<T>
sourcepub fn insert_one(&self, doc: impl Borrow<T>) -> InsertOne<'_>
pub fn insert_one(&self, doc: impl Borrow<T>) -> InsertOne<'_>
Inserts doc
into the collection.
Note that either an owned or borrowed value can be inserted here, so the input document does not need to be cloned to be passed in.
This operation will retry once upon failure if the connection and encountered error support retryability. See the documentation here for more information on retryable writes.
await
will return Result<InsertOneResult>
.
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn list_indexes(&self) -> ListIndexes<'_>
pub fn list_indexes(&self) -> ListIndexes<'_>
Lists all indexes on this collection.
await
will return Result<Cursor<IndexModel>>
(or
Result<SessionCursor<IndexModel>>
if a ClientSession
is provided).
sourcepub fn list_index_names(&self) -> ListIndexes<'_, ListNames>
pub fn list_index_names(&self) -> ListIndexes<'_, ListNames>
source§impl<T: Serialize + Send + Sync> Collection<T>
impl<T: Serialize + Send + Sync> Collection<T>
sourcepub fn replace_one(
&self,
query: Document,
replacement: impl Borrow<T>,
) -> ReplaceOne<'_>
pub fn replace_one( &self, query: Document, replacement: impl Borrow<T>, ) -> ReplaceOne<'_>
Replaces up to one document matching query
in the collection with replacement
.
This operation will retry once upon failure if the connection and encountered error support retryability. See the documentation here for more information on retryable writes.
await
will return Result<UpdateResult>
.
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn create_search_indexes(
&self,
models: impl IntoIterator<Item = SearchIndexModel>,
) -> CreateSearchIndex<'_, Multiple>
pub fn create_search_indexes( &self, models: impl IntoIterator<Item = SearchIndexModel>, ) -> CreateSearchIndex<'_, Multiple>
sourcepub fn create_search_index(
&self,
model: SearchIndexModel,
) -> CreateSearchIndex<'_, Single>
pub fn create_search_index( &self, model: SearchIndexModel, ) -> CreateSearchIndex<'_, Single>
sourcepub fn update_search_index(
&self,
name: impl Into<String>,
definition: Document,
) -> UpdateSearchIndex<'_>
pub fn update_search_index( &self, name: impl Into<String>, definition: Document, ) -> UpdateSearchIndex<'_>
Updates the search index with the given name to use the provided definition.
await
will return [Result<()>
].
sourcepub fn drop_search_index(&self, name: impl Into<String>) -> DropSearchIndex<'_>
pub fn drop_search_index(&self, name: impl Into<String>) -> DropSearchIndex<'_>
Drops the search index with the given name.
await
will return [Result<()>
].
sourcepub fn list_search_indexes(&self) -> ListSearchIndexes<'_>
pub fn list_search_indexes(&self) -> ListSearchIndexes<'_>
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn update_many(
&self,
query: Document,
update: impl Into<UpdateModifications>,
) -> Update<'_>
pub fn update_many( &self, query: Document, update: impl Into<UpdateModifications>, ) -> Update<'_>
Updates all documents matching query
in the collection.
Both Document
and Vec<Document>
implement Into<UpdateModifications>
, so either can be
passed in place of constructing the enum case. Note: pipeline updates are only supported
in MongoDB 4.2+. See the official MongoDB
documentation for more information on specifying updates.
await
will return Result<UpdateResult>
.
sourcepub fn update_one(
&self,
query: Document,
update: impl Into<UpdateModifications>,
) -> Update<'_>
pub fn update_one( &self, query: Document, update: impl Into<UpdateModifications>, ) -> Update<'_>
Updates up to one document matching query
in the collection.
Both Document
and Vec<Document>
implement Into<UpdateModifications>
, so either can be
passed in place of constructing the enum case. Note: pipeline updates are only supported
in MongoDB 4.2+. See the official MongoDB
documentation for more information on specifying updates.
This operation will retry once upon failure if the connection and encountered error support retryability. See the documentation here for more information on retryable writes.
await
will return Result<UpdateResult>
.
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn watch(&self) -> Watch<'_, T>
pub fn watch(&self) -> Watch<'_, T>
Starts a new ChangeStream
that receives events
for all changes in this collection. A
ChangeStream
cannot be started on system
collections.
See the documentation here on change streams.
Change streams require either a “majority” read concern or no read concern. Anything else will cause a server error.
await
will return Result<ChangeStream<ChangeStreamEvent<T>>>
or
Result<SessionChangeStream<ChangeStreamEvent<T>>>
if a
ClientSession
has been provided.
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn insert_one_model(
&self,
document: impl Borrow<T>,
) -> Result<InsertOneModel>
pub fn insert_one_model( &self, document: impl Borrow<T>, ) -> Result<InsertOneModel>
Constructs an InsertOneModel
with this collection’s namespace by serializing the
provided value into a Document
. Returns an error if serialization fails.
Note that the returned value must be provided to bulk_write
for the insert to be performed.
sourcepub fn replace_one_model(
&self,
filter: Document,
replacement: impl Borrow<T>,
) -> Result<ReplaceOneModel>
pub fn replace_one_model( &self, filter: Document, replacement: impl Borrow<T>, ) -> Result<ReplaceOneModel>
Constructs a ReplaceOneModel
with this collection’s namespace by serializing the
provided value into a Document
. Returns an error if serialization fails.
Note that the returned value must be provided to bulk_write
for the replace to be performed.
source§impl<T> Collection<T>
impl<T> Collection<T>
sourcepub fn clone_with_type<U: Send + Sync>(&self) -> Collection<U>
pub fn clone_with_type<U: Send + Sync>(&self) -> Collection<U>
Gets a clone of the Collection
with a different type U
.
sourcepub fn namespace(&self) -> Namespace
pub fn namespace(&self) -> Namespace
Gets the namespace of the Collection
.
The namespace of a MongoDB collection is the concatenation of the name of the database containing it, the ‘.’ character, and the name of the collection itself. For example, if a collection named “bar” is created in a database named “foo”, the namespace of the collection is “foo.bar”.
sourcepub fn selection_criteria(&self) -> Option<&SelectionCriteria>
pub fn selection_criteria(&self) -> Option<&SelectionCriteria>
Gets the selection criteria of the Collection
.
sourcepub fn read_concern(&self) -> Option<&ReadConcern>
pub fn read_concern(&self) -> Option<&ReadConcern>
Gets the read concern of the Collection
.
sourcepub fn write_concern(&self) -> Option<&WriteConcern>
pub fn write_concern(&self) -> Option<&WriteConcern>
Gets the write concern of the Collection
.
Trait Implementations§
source§impl<T> Clone for Collection<T>
impl<T> Clone for Collection<T>
Auto Trait Implementations§
impl<T> Freeze for Collection<T>
impl<T> !RefUnwindSafe for Collection<T>
impl<T> Send for Collection<T>
impl<T> Sync for Collection<T>
impl<T> Unpin for Collection<T>
impl<T> !UnwindSafe for Collection<T>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<T> FmtForward for T
impl<T> FmtForward for T
source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moresource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moresource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.source§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> Tap for T
impl<T> Tap for T
source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moresource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moresource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moresource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moresource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moresource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.