Struct mongodm::Repository
source · pub struct Repository<M: Model> { /* private fields */ }
Expand description
Associate a mongodb::Collection
and a specific Model
.
This type can safely be copied and passed around because std::sync::Arc
is used internally.
Underlying mongodb::Collection
can be retrieved at anytime with Repository::get_underlying
.
Implementations§
source§impl<M: Model> Repository<M>
impl<M: Model> Repository<M>
sourcepub fn new_with_options(db: Database, options: CollectionOptions) -> Self
pub fn new_with_options(db: Database, options: CollectionOptions) -> Self
Create a new repository with associated collection options (override Model::coll_options
).
sourcepub fn collection_name(&self) -> &'static str
pub fn collection_name(&self) -> &'static str
Returns associated M::collection_name
.
sourcepub fn get_underlying(&self) -> Collection<M>
pub fn get_underlying(&self) -> Collection<M>
Returns underlying mongodb::Collection
.
sourcepub fn cast_model<OtherModel>(self) -> Repository<OtherModel>
pub fn cast_model<OtherModel>(self) -> Repository<OtherModel>
Convert this repository to use another Model
. Only compiles if both Model::CollConf
are identicals.
Example
use mongodm::{ToRepository, Model, CollectionConfig};
use mongodm::mongo::bson::doc;
use mongodm::f;
use serde::{Serialize, Deserialize};
struct UserCollConf;
impl CollectionConfig for UserCollConf {
fn collection_name() -> &'static str {
"cast_model"
}
}
// Latest schema currently in use
#[derive(Serialize, Deserialize)]
struct User {
username: String,
last_seen: i64,
}
impl Model for User {
type CollConf = UserCollConf;
}
// Old schema
#[derive(Serialize, Deserialize)]
struct UserV1 {
name: String,
ls: i64,
}
// Versionned version of our `User`
#[derive(Serialize, Deserialize)]
#[serde(untagged)]
enum UserVersionned {
Last(User),
V1(UserV1),
}
impl Model for UserVersionned {
type CollConf = UserCollConf; // same as the non-versionned version
}
// We have some repository for `User`
let repo = db.repository::<User>();
// Assume the following document is stored: { "name": "Bernard", "ls": 1500 }
// Following query should fails because the schema doesn't match
let err = repo.find_one(doc!{ f!(name in UserV1): "Bernard" }, None).await.err().unwrap();
assert_eq!(err.to_string(), "missing field `username`"); // serde deserialization error
// We can get a repository for `UserVersionned` from our `Repository<User>`
// because `User::CollConf` == `UserVersionned::CollConf`
let repo_versionned = repo.cast_model::<UserVersionned>();
// Our versionned model should match with the document
let ret = repo_versionned.find_one(doc!{ f!(name in UserV1): "Bernard" }, None).await?;
match ret {
Some(UserVersionned::V1(UserV1 { name, ls: 1500 })) if name == "Bernard" => { /* success */ }
_ => panic!("Expected document was missing"),
}
Following code will fail to compile because CollectionConfig
doesn’t match.
use mongodm::{ToRepository, Model, CollectionConfig};
use serde::{Serialize, Deserialize};
struct ACollConf;
impl CollectionConfig for ACollConf {
fn collection_name() -> &'static str { "a" }
}
#[derive(Serialize, Deserialize)]
struct A;
impl Model for A {
type CollConf = ACollConf;
}
struct BCollConf;
impl CollectionConfig for BCollConf {
fn collection_name() -> &'static str { "B" }
}
#[derive(Serialize, Deserialize)]
struct B;
impl Model for B {
type CollConf = BCollConf;
}
// Doesn't compile because `A` and `B` doesn't share the same `CollectionConfig`.
db.repository::<A>().cast_model::<B>();
sourcepub async fn bulk_update<V, U>(&self, updates: V) -> Result<BulkUpdateResult>
pub async fn bulk_update<V, U>(&self, updates: V) -> Result<BulkUpdateResult>
Apply multiple update operations in bulk.
This will be removed once support for bulk update is added to the official driver. see for tracking progress on this feature in the official driver.
Example
use mongodm::prelude::*;
/* ... */
let db: mongodb::Database; /* exists */
let repository = db.repository::<User>();
/* ... */
let bulk_update_res = repository
.bulk_update(&vec![
&BulkUpdate {
query: doc! { f!(name in User): "Dane" },
update: doc! { Set: { f!(age in User): 12 } },
options: None,
},
&BulkUpdate {
query: doc! { f!(name in User): "David" },
update: doc! { Set: { f!(age in User): 30 } },
options: None,
},
])
.await
.unwrap();
assert_eq!(bulk_update_res.nb_affected, 2);
assert_eq!(bulk_update_res.nb_modified, 2);
Methods from Deref<Target = Collection<M>>§
sourcepub fn clone_with_type<U>(&self) -> Collection<U>
pub fn clone_with_type<U>(&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
.
sourcepub async fn drop(
&self,
options: impl Into<Option<DropCollectionOptions>>
) -> Result<(), Error>
pub async fn drop( &self, options: impl Into<Option<DropCollectionOptions>> ) -> Result<(), Error>
Drops the collection, deleting all data and indexes stored in it.
sourcepub async fn drop_with_session(
&self,
options: impl Into<Option<DropCollectionOptions>>,
session: &mut ClientSession
) -> Result<(), Error>
pub async fn drop_with_session( &self, options: impl Into<Option<DropCollectionOptions>>, session: &mut ClientSession ) -> Result<(), Error>
Drops the collection, deleting all data and indexes stored in it using the provided
ClientSession
.
sourcepub async fn aggregate(
&self,
pipeline: impl IntoIterator<Item = Document>,
options: impl Into<Option<AggregateOptions>>
) -> Result<Cursor<Document>, Error>
pub async fn aggregate( &self, pipeline: impl IntoIterator<Item = Document>, options: impl Into<Option<AggregateOptions>> ) -> Result<Cursor<Document>, Error>
Runs an aggregation operation.
See the documentation here for more information on aggregations.
sourcepub async fn aggregate_with_session(
&self,
pipeline: impl IntoIterator<Item = Document>,
options: impl Into<Option<AggregateOptions>>,
session: &mut ClientSession
) -> Result<SessionCursor<Document>, Error>
pub async fn aggregate_with_session( &self, pipeline: impl IntoIterator<Item = Document>, options: impl Into<Option<AggregateOptions>>, session: &mut ClientSession ) -> Result<SessionCursor<Document>, Error>
Runs an aggregation operation using the provided ClientSession
.
See the documentation here for more information on aggregations.
sourcepub async fn estimated_document_count(
&self,
options: impl Into<Option<EstimatedDocumentCountOptions>>
) -> Result<u64, Error>
pub async fn estimated_document_count( &self, options: impl Into<Option<EstimatedDocumentCountOptions>> ) -> Result<u64, Error>
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 async fn count_documents(
&self,
filter: impl Into<Option<Document>>,
options: impl Into<Option<CountOptions>>
) -> Result<u64, Error>
pub async fn count_documents( &self, filter: impl Into<Option<Document>>, options: impl Into<Option<CountOptions>> ) -> Result<u64, Error>
Gets the number of documents matching filter
.
Note that using Collection::estimated_document_count
is recommended instead of this method is most cases.
sourcepub async fn count_documents_with_session(
&self,
filter: impl Into<Option<Document>>,
options: impl Into<Option<CountOptions>>,
session: &mut ClientSession
) -> Result<u64, Error>
pub async fn count_documents_with_session( &self, filter: impl Into<Option<Document>>, options: impl Into<Option<CountOptions>>, session: &mut ClientSession ) -> Result<u64, Error>
Gets the number of documents matching filter
using the provided ClientSession
.
Note that using Collection::estimated_document_count
is recommended instead of this method is most cases.
sourcepub async fn create_index(
&self,
index: IndexModel,
options: impl Into<Option<CreateIndexOptions>>
) -> Result<CreateIndexResult, Error>
pub async fn create_index( &self, index: IndexModel, options: impl Into<Option<CreateIndexOptions>> ) -> Result<CreateIndexResult, Error>
Creates the given index on this collection.
sourcepub async fn create_index_with_session(
&self,
index: IndexModel,
options: impl Into<Option<CreateIndexOptions>>,
session: &mut ClientSession
) -> Result<CreateIndexResult, Error>
pub async fn create_index_with_session( &self, index: IndexModel, options: impl Into<Option<CreateIndexOptions>>, session: &mut ClientSession ) -> Result<CreateIndexResult, Error>
Creates the given index on this collection using the provided ClientSession
.
sourcepub async fn create_indexes(
&self,
indexes: impl IntoIterator<Item = IndexModel>,
options: impl Into<Option<CreateIndexOptions>>
) -> Result<CreateIndexesResult, Error>
pub async fn create_indexes( &self, indexes: impl IntoIterator<Item = IndexModel>, options: impl Into<Option<CreateIndexOptions>> ) -> Result<CreateIndexesResult, Error>
Creates the given indexes on this collection.
sourcepub async fn create_indexes_with_session(
&self,
indexes: impl IntoIterator<Item = IndexModel>,
options: impl Into<Option<CreateIndexOptions>>,
session: &mut ClientSession
) -> Result<CreateIndexesResult, Error>
pub async fn create_indexes_with_session( &self, indexes: impl IntoIterator<Item = IndexModel>, options: impl Into<Option<CreateIndexOptions>>, session: &mut ClientSession ) -> Result<CreateIndexesResult, Error>
Creates the given indexes on this collection using the provided ClientSession
.
sourcepub async fn delete_many(
&self,
query: Document,
options: impl Into<Option<DeleteOptions>>
) -> Result<DeleteResult, Error>
pub async fn delete_many( &self, query: Document, options: impl Into<Option<DeleteOptions>> ) -> Result<DeleteResult, Error>
Deletes all documents stored in the collection matching query
.
sourcepub async fn delete_many_with_session(
&self,
query: Document,
options: impl Into<Option<DeleteOptions>>,
session: &mut ClientSession
) -> Result<DeleteResult, Error>
pub async fn delete_many_with_session( &self, query: Document, options: impl Into<Option<DeleteOptions>>, session: &mut ClientSession ) -> Result<DeleteResult, Error>
Deletes all documents stored in the collection matching query
using the provided
ClientSession
.
sourcepub async fn delete_one(
&self,
query: Document,
options: impl Into<Option<DeleteOptions>>
) -> Result<DeleteResult, Error>
pub async fn delete_one( &self, query: Document, options: impl Into<Option<DeleteOptions>> ) -> Result<DeleteResult, Error>
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.
sourcepub async fn delete_one_with_session(
&self,
query: Document,
options: impl Into<Option<DeleteOptions>>,
session: &mut ClientSession
) -> Result<DeleteResult, Error>
pub async fn delete_one_with_session( &self, query: Document, options: impl Into<Option<DeleteOptions>>, session: &mut ClientSession ) -> Result<DeleteResult, Error>
Deletes up to one document found matching query
using the provided ClientSession
.
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.
sourcepub async fn distinct(
&self,
field_name: impl AsRef<str>,
filter: impl Into<Option<Document>>,
options: impl Into<Option<DistinctOptions>>
) -> Result<Vec<Bson>, Error>
pub async fn distinct( &self, field_name: impl AsRef<str>, filter: impl Into<Option<Document>>, options: impl Into<Option<DistinctOptions>> ) -> Result<Vec<Bson>, Error>
Finds the distinct values of the field specified by field_name
across the collection.
sourcepub async fn distinct_with_session(
&self,
field_name: impl AsRef<str>,
filter: impl Into<Option<Document>>,
options: impl Into<Option<DistinctOptions>>,
session: &mut ClientSession
) -> Result<Vec<Bson>, Error>
pub async fn distinct_with_session( &self, field_name: impl AsRef<str>, filter: impl Into<Option<Document>>, options: impl Into<Option<DistinctOptions>>, session: &mut ClientSession ) -> Result<Vec<Bson>, Error>
Finds the distinct values of the field specified by field_name
across the collection using
the provided ClientSession
.
sourcepub async fn drop_index(
&self,
name: impl AsRef<str>,
options: impl Into<Option<DropIndexOptions>>
) -> Result<(), Error>
pub async fn drop_index( &self, name: impl AsRef<str>, options: impl Into<Option<DropIndexOptions>> ) -> Result<(), Error>
Drops the index specified by name
from this collection.
sourcepub async fn drop_index_with_session(
&self,
name: impl AsRef<str>,
options: impl Into<Option<DropIndexOptions>>,
session: &mut ClientSession
) -> Result<(), Error>
pub async fn drop_index_with_session( &self, name: impl AsRef<str>, options: impl Into<Option<DropIndexOptions>>, session: &mut ClientSession ) -> Result<(), Error>
Drops the index specified by name
from this collection using the provided ClientSession
.
sourcepub async fn drop_indexes(
&self,
options: impl Into<Option<DropIndexOptions>>
) -> Result<(), Error>
pub async fn drop_indexes( &self, options: impl Into<Option<DropIndexOptions>> ) -> Result<(), Error>
Drops all indexes associated with this collection.
sourcepub async fn drop_indexes_with_session(
&self,
options: impl Into<Option<DropIndexOptions>>,
session: &mut ClientSession
) -> Result<(), Error>
pub async fn drop_indexes_with_session( &self, options: impl Into<Option<DropIndexOptions>>, session: &mut ClientSession ) -> Result<(), Error>
Drops all indexes associated with this collection using the provided ClientSession
.
sourcepub async fn list_indexes(
&self,
options: impl Into<Option<ListIndexesOptions>>
) -> Result<Cursor<IndexModel>, Error>
pub async fn list_indexes( &self, options: impl Into<Option<ListIndexesOptions>> ) -> Result<Cursor<IndexModel>, Error>
Lists all indexes on this collection.
sourcepub async fn list_indexes_with_session(
&self,
options: impl Into<Option<ListIndexesOptions>>,
session: &mut ClientSession
) -> Result<SessionCursor<IndexModel>, Error>
pub async fn list_indexes_with_session( &self, options: impl Into<Option<ListIndexesOptions>>, session: &mut ClientSession ) -> Result<SessionCursor<IndexModel>, Error>
Lists all indexes on this collection using the provided ClientSession
.
sourcepub async fn list_index_names(&self) -> Result<Vec<String>, Error>
pub async fn list_index_names(&self) -> Result<Vec<String>, Error>
Gets the names of all indexes on the collection.
sourcepub async fn list_index_names_with_session(
&self,
session: &mut ClientSession
) -> Result<Vec<String>, Error>
pub async fn list_index_names_with_session( &self, session: &mut ClientSession ) -> Result<Vec<String>, Error>
Gets the names of all indexes on the collection using the provided ClientSession
.
sourcepub async fn update_many(
&self,
query: Document,
update: impl Into<UpdateModifications>,
options: impl Into<Option<UpdateOptions>>
) -> Result<UpdateResult, Error>
pub async fn update_many( &self, query: Document, update: impl Into<UpdateModifications>, options: impl Into<Option<UpdateOptions>> ) -> Result<UpdateResult, Error>
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.
sourcepub async fn update_many_with_session(
&self,
query: Document,
update: impl Into<UpdateModifications>,
options: impl Into<Option<UpdateOptions>>,
session: &mut ClientSession
) -> Result<UpdateResult, Error>
pub async fn update_many_with_session( &self, query: Document, update: impl Into<UpdateModifications>, options: impl Into<Option<UpdateOptions>>, session: &mut ClientSession ) -> Result<UpdateResult, Error>
Updates all documents matching query
in the collection using the provided ClientSession
.
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.
sourcepub async fn update_one(
&self,
query: Document,
update: impl Into<UpdateModifications>,
options: impl Into<Option<UpdateOptions>>
) -> Result<UpdateResult, Error>
pub async fn update_one( &self, query: Document, update: impl Into<UpdateModifications>, options: impl Into<Option<UpdateOptions>> ) -> Result<UpdateResult, Error>
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.
sourcepub async fn update_one_with_session(
&self,
query: Document,
update: impl Into<UpdateModifications>,
options: impl Into<Option<UpdateOptions>>,
session: &mut ClientSession
) -> Result<UpdateResult, Error>
pub async fn update_one_with_session( &self, query: Document, update: impl Into<UpdateModifications>, options: impl Into<Option<UpdateOptions>>, session: &mut ClientSession ) -> Result<UpdateResult, Error>
Updates up to one document matching query
in the collection using the provided
ClientSession
.
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.
sourcepub async fn watch(
&self,
pipeline: impl IntoIterator<Item = Document>,
options: impl Into<Option<ChangeStreamOptions>>
) -> Result<ChangeStream<ChangeStreamEvent<T>>, Error>
pub async fn watch( &self, pipeline: impl IntoIterator<Item = Document>, options: impl Into<Option<ChangeStreamOptions>> ) -> Result<ChangeStream<ChangeStreamEvent<T>>, Error>
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.
Also note that using a $project
stage to remove any of the _id
, operationType
or ns
fields will cause an error. The driver requires these fields to support resumability. For
more information on resumability, see the documentation for
ChangeStream
If the pipeline alters the structure of the returned events, the parsed type will need to be
changed via ChangeStream::with_type
.
sourcepub async fn watch_with_session(
&self,
pipeline: impl IntoIterator<Item = Document>,
options: impl Into<Option<ChangeStreamOptions>>,
session: &mut ClientSession
) -> Result<SessionChangeStream<ChangeStreamEvent<T>>, Error>
pub async fn watch_with_session( &self, pipeline: impl IntoIterator<Item = Document>, options: impl Into<Option<ChangeStreamOptions>>, session: &mut ClientSession ) -> Result<SessionChangeStream<ChangeStreamEvent<T>>, Error>
Starts a new SessionChangeStream
that receives events for all changes in this collection
using the provided ClientSession
. See Client::watch
for more information.
sourcepub async fn find(
&self,
filter: impl Into<Option<Document>>,
options: impl Into<Option<FindOptions>>
) -> Result<Cursor<T>, Error>
pub async fn find( &self, filter: impl Into<Option<Document>>, options: impl Into<Option<FindOptions>> ) -> Result<Cursor<T>, Error>
Finds the documents in the collection matching filter
.
sourcepub async fn find_with_session(
&self,
filter: impl Into<Option<Document>>,
options: impl Into<Option<FindOptions>>,
session: &mut ClientSession
) -> Result<SessionCursor<T>, Error>
pub async fn find_with_session( &self, filter: impl Into<Option<Document>>, options: impl Into<Option<FindOptions>>, session: &mut ClientSession ) -> Result<SessionCursor<T>, Error>
Finds the documents in the collection matching filter
using the provided ClientSession
.
sourcepub async fn find_one(
&self,
filter: impl Into<Option<Document>>,
options: impl Into<Option<FindOneOptions>>
) -> Result<Option<T>, Error>
pub async fn find_one( &self, filter: impl Into<Option<Document>>, options: impl Into<Option<FindOneOptions>> ) -> Result<Option<T>, Error>
Finds a single document in the collection matching filter
.
sourcepub async fn find_one_with_session(
&self,
filter: impl Into<Option<Document>>,
options: impl Into<Option<FindOneOptions>>,
session: &mut ClientSession
) -> Result<Option<T>, Error>
pub async fn find_one_with_session( &self, filter: impl Into<Option<Document>>, options: impl Into<Option<FindOneOptions>>, session: &mut ClientSession ) -> Result<Option<T>, Error>
Finds a single document in the collection matching filter
using the provided
ClientSession
.
sourcepub async fn find_one_and_delete(
&self,
filter: Document,
options: impl Into<Option<FindOneAndDeleteOptions>>
) -> Result<Option<T>, Error>
pub async fn find_one_and_delete( &self, filter: Document, options: impl Into<Option<FindOneAndDeleteOptions>> ) -> Result<Option<T>, Error>
Atomically finds up to one document in the collection matching filter
and deletes it.
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.
sourcepub async fn find_one_and_delete_with_session(
&self,
filter: Document,
options: impl Into<Option<FindOneAndDeleteOptions>>,
session: &mut ClientSession
) -> Result<Option<T>, Error>
pub async fn find_one_and_delete_with_session( &self, filter: Document, options: impl Into<Option<FindOneAndDeleteOptions>>, session: &mut ClientSession ) -> Result<Option<T>, Error>
Atomically finds up to one document in the collection matching filter
and deletes it using
the provided ClientSession
.
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.
sourcepub async fn find_one_and_update(
&self,
filter: Document,
update: impl Into<UpdateModifications>,
options: impl Into<Option<FindOneAndUpdateOptions>>
) -> Result<Option<T>, Error>
pub async fn find_one_and_update( &self, filter: Document, update: impl Into<UpdateModifications>, options: impl Into<Option<FindOneAndUpdateOptions>> ) -> Result<Option<T>, Error>
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.
sourcepub async fn find_one_and_update_with_session(
&self,
filter: Document,
update: impl Into<UpdateModifications>,
options: impl Into<Option<FindOneAndUpdateOptions>>,
session: &mut ClientSession
) -> Result<Option<T>, Error>
pub async fn find_one_and_update_with_session( &self, filter: Document, update: impl Into<UpdateModifications>, options: impl Into<Option<FindOneAndUpdateOptions>>, session: &mut ClientSession ) -> Result<Option<T>, Error>
Atomically finds up to one document in the collection matching filter
and updates it using
the provided ClientSession
. 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.
sourcepub async fn find_one_and_replace(
&self,
filter: Document,
replacement: impl Borrow<T>,
options: impl Into<Option<FindOneAndReplaceOptions>>
) -> Result<Option<T>, Error>
pub async fn find_one_and_replace( &self, filter: Document, replacement: impl Borrow<T>, options: impl Into<Option<FindOneAndReplaceOptions>> ) -> Result<Option<T>, Error>
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.
sourcepub async fn find_one_and_replace_with_session(
&self,
filter: Document,
replacement: impl Borrow<T>,
options: impl Into<Option<FindOneAndReplaceOptions>>,
session: &mut ClientSession
) -> Result<Option<T>, Error>
pub async fn find_one_and_replace_with_session( &self, filter: Document, replacement: impl Borrow<T>, options: impl Into<Option<FindOneAndReplaceOptions>>, session: &mut ClientSession ) -> Result<Option<T>, Error>
Atomically finds up to one document in the collection matching filter
and replaces it with
replacement
using the provided ClientSession
.
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.
sourcepub async fn insert_many(
&self,
docs: impl IntoIterator<Item = impl Borrow<T>>,
options: impl Into<Option<InsertManyOptions>>
) -> Result<InsertManyResult, Error>
pub async fn insert_many( &self, docs: impl IntoIterator<Item = impl Borrow<T>>, options: impl Into<Option<InsertManyOptions>> ) -> Result<InsertManyResult, Error>
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.
sourcepub async fn insert_many_with_session(
&self,
docs: impl IntoIterator<Item = impl Borrow<T>>,
options: impl Into<Option<InsertManyOptions>>,
session: &mut ClientSession
) -> Result<InsertManyResult, Error>
pub async fn insert_many_with_session( &self, docs: impl IntoIterator<Item = impl Borrow<T>>, options: impl Into<Option<InsertManyOptions>>, session: &mut ClientSession ) -> Result<InsertManyResult, Error>
Inserts the data in docs
into the collection using the provided ClientSession
.
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.
sourcepub async fn insert_one(
&self,
doc: impl Borrow<T>,
options: impl Into<Option<InsertOneOptions>>
) -> Result<InsertOneResult, Error>
pub async fn insert_one( &self, doc: impl Borrow<T>, options: impl Into<Option<InsertOneOptions>> ) -> Result<InsertOneResult, Error>
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.
sourcepub async fn insert_one_with_session(
&self,
doc: impl Borrow<T>,
options: impl Into<Option<InsertOneOptions>>,
session: &mut ClientSession
) -> Result<InsertOneResult, Error>
pub async fn insert_one_with_session( &self, doc: impl Borrow<T>, options: impl Into<Option<InsertOneOptions>>, session: &mut ClientSession ) -> Result<InsertOneResult, Error>
Inserts doc
into the collection using the provided ClientSession
.
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.
sourcepub async fn replace_one(
&self,
query: Document,
replacement: impl Borrow<T>,
options: impl Into<Option<ReplaceOptions>>
) -> Result<UpdateResult, Error>
pub async fn replace_one( &self, query: Document, replacement: impl Borrow<T>, options: impl Into<Option<ReplaceOptions>> ) -> Result<UpdateResult, Error>
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.
sourcepub async fn replace_one_with_session(
&self,
query: Document,
replacement: impl Borrow<T>,
options: impl Into<Option<ReplaceOptions>>,
session: &mut ClientSession
) -> Result<UpdateResult, Error>
pub async fn replace_one_with_session( &self, query: Document, replacement: impl Borrow<T>, options: impl Into<Option<ReplaceOptions>>, session: &mut ClientSession ) -> Result<UpdateResult, Error>
Replaces up to one document matching query
in the collection with replacement
using the
provided ClientSession
.
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.
Trait Implementations§
source§impl<M: Model> Clone for Repository<M>
impl<M: Model> Clone for Repository<M>
source§impl<M: Model> Deref for Repository<M>
impl<M: Model> Deref for Repository<M>
§type Target = Collection<M>
type Target = Collection<M>
source§fn deref(&self) -> &Collection<M>
fn deref(&self) -> &Collection<M>
Auto Trait Implementations§
impl<M> !RefUnwindSafe for Repository<M>
impl<M> Send for Repository<M>where
M: Send,
impl<M> Sync for Repository<M>where
M: Sync,
impl<M> Unpin for Repository<M>
impl<M> !UnwindSafe for Repository<M>
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
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§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.§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.§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.§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.§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.§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.§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.§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.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.§impl<T> Tap for T
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.