Skip to content

Commit f41aaca

Browse files
CSHARP-2065: Support ReplaceOptions in CRUD API.
1 parent ee2750d commit f41aaca

File tree

8 files changed

+591
-79
lines changed

8 files changed

+591
-79
lines changed

src/MongoDB.Driver/IMongoCollection.cs

Lines changed: 60 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -723,7 +723,7 @@ public interface IMongoCollection<TDocument>
723723
/// <param name="document">The document.</param>
724724
/// <param name="options">The options.</param>
725725
/// <param name="cancellationToken">The cancellation token.</param>
726-
void InsertOne( IClientSessionHandle session, TDocument document, InsertOneOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
726+
void InsertOne(IClientSessionHandle session, TDocument document, InsertOneOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
727727

728728
/// <summary>
729729
/// Inserts a single document.
@@ -867,7 +867,34 @@ public interface IMongoCollection<TDocument>
867867
/// <returns>
868868
/// The result of the replacement.
869869
/// </returns>
870-
ReplaceOneResult ReplaceOne(FilterDefinition<TDocument> filter, TDocument replacement, UpdateOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
870+
ReplaceOneResult ReplaceOne(FilterDefinition<TDocument> filter, TDocument replacement, ReplaceOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
871+
872+
873+
/// <summary>
874+
/// Replaces a single document.
875+
/// </summary>
876+
/// <param name="filter">The filter.</param>
877+
/// <param name="replacement">The replacement.</param>
878+
/// <param name="options">The options.</param>
879+
/// <param name="cancellationToken">The cancellation token.</param>
880+
/// <returns>
881+
/// The result of the replacement.
882+
/// </returns>
883+
[Obsolete("Use the overload that takes a ReplaceOptions instead of an UpdateOptions.")]
884+
ReplaceOneResult ReplaceOne(FilterDefinition<TDocument> filter, TDocument replacement, UpdateOptions options, CancellationToken cancellationToken = default(CancellationToken));
885+
886+
/// <summary>
887+
/// Replaces a single document.
888+
/// </summary>
889+
/// <param name="session">The session.</param>
890+
/// <param name="filter">The filter.</param>
891+
/// <param name="replacement">The replacement.</param>
892+
/// <param name="options">The options.</param>
893+
/// <param name="cancellationToken">The cancellation token.</param>
894+
/// <returns>
895+
/// The result of the replacement.
896+
/// </returns>
897+
ReplaceOneResult ReplaceOne(IClientSessionHandle session, FilterDefinition<TDocument> filter, TDocument replacement, ReplaceOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
871898

872899
/// <summary>
873900
/// Replaces a single document.
@@ -880,7 +907,8 @@ public interface IMongoCollection<TDocument>
880907
/// <returns>
881908
/// The result of the replacement.
882909
/// </returns>
883-
ReplaceOneResult ReplaceOne(IClientSessionHandle session, FilterDefinition<TDocument> filter, TDocument replacement, UpdateOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
910+
[Obsolete("Use the overload that takes a ReplaceOptions instead of an UpdateOptions.")]
911+
ReplaceOneResult ReplaceOne(IClientSessionHandle session, FilterDefinition<TDocument> filter, TDocument replacement, UpdateOptions options, CancellationToken cancellationToken = default(CancellationToken));
884912

885913
/// <summary>
886914
/// Replaces a single document.
@@ -892,7 +920,33 @@ public interface IMongoCollection<TDocument>
892920
/// <returns>
893921
/// The result of the replacement.
894922
/// </returns>
895-
Task<ReplaceOneResult> ReplaceOneAsync(FilterDefinition<TDocument> filter, TDocument replacement, UpdateOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
923+
Task<ReplaceOneResult> ReplaceOneAsync(FilterDefinition<TDocument> filter, TDocument replacement, ReplaceOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
924+
925+
/// <summary>
926+
/// Replaces a single document.
927+
/// </summary>
928+
/// <param name="filter">The filter.</param>
929+
/// <param name="replacement">The replacement.</param>
930+
/// <param name="options">The options.</param>
931+
/// <param name="cancellationToken">The cancellation token.</param>
932+
/// <returns>
933+
/// The result of the replacement.
934+
/// </returns>
935+
[Obsolete("Use the overload that takes a ReplaceOptions instead of an UpdateOptions.")]
936+
Task<ReplaceOneResult> ReplaceOneAsync(FilterDefinition<TDocument> filter, TDocument replacement, UpdateOptions options, CancellationToken cancellationToken = default(CancellationToken));
937+
938+
/// <summary>
939+
/// Replaces a single document.
940+
/// </summary>
941+
/// <param name="session">The session.</param>
942+
/// <param name="filter">The filter.</param>
943+
/// <param name="replacement">The replacement.</param>
944+
/// <param name="options">The options.</param>
945+
/// <param name="cancellationToken">The cancellation token.</param>
946+
/// <returns>
947+
/// The result of the replacement.
948+
/// </returns>
949+
Task<ReplaceOneResult> ReplaceOneAsync(IClientSessionHandle session, FilterDefinition<TDocument> filter, TDocument replacement, ReplaceOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
896950

897951
/// <summary>
898952
/// Replaces a single document.
@@ -905,7 +959,8 @@ public interface IMongoCollection<TDocument>
905959
/// <returns>
906960
/// The result of the replacement.
907961
/// </returns>
908-
Task<ReplaceOneResult> ReplaceOneAsync(IClientSessionHandle session, FilterDefinition<TDocument> filter, TDocument replacement, UpdateOptions options = null, CancellationToken cancellationToken = default(CancellationToken));
962+
[Obsolete("Use the overload that takes a ReplaceOptions instead of an UpdateOptions.")]
963+
Task<ReplaceOneResult> ReplaceOneAsync(IClientSessionHandle session, FilterDefinition<TDocument> filter, TDocument replacement, UpdateOptions options, CancellationToken cancellationToken = default(CancellationToken));
909964

910965
/// <summary>
911966
/// Updates many documents.

src/MongoDB.Driver/IMongoCollectionExtensions.cs

Lines changed: 101 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public static IAggregateFluent<TDocument> Aggregate<TDocument>(this IMongoCollec
7171
public static IMongoQueryable<TDocument> AsQueryable<TDocument>(this IMongoCollection<TDocument> collection, AggregateOptions aggregateOptions = null)
7272
{
7373
Ensure.IsNotNull(collection, nameof(collection));
74-
74+
7575
aggregateOptions = aggregateOptions ?? new AggregateOptions();
7676
var provider = new MongoQueryProviderImpl<TDocument>(collection, aggregateOptions);
7777
return new MongoQueryableImpl<TDocument, TDocument>(provider);
@@ -1856,14 +1856,59 @@ public static IFindFluent<TDocument, TDocument> Find<TDocument>(this IMongoColle
18561856
/// <returns>
18571857
/// The result of the replacement.
18581858
/// </returns>
1859-
public static ReplaceOneResult ReplaceOne<TDocument>(this IMongoCollection<TDocument> collection, Expression<Func<TDocument, bool>> filter, TDocument replacement, UpdateOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
1859+
public static ReplaceOneResult ReplaceOne<TDocument>(this IMongoCollection<TDocument> collection, Expression<Func<TDocument, bool>> filter, TDocument replacement, ReplaceOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
18601860
{
18611861
Ensure.IsNotNull(collection, nameof(collection));
18621862
Ensure.IsNotNull(filter, nameof(filter));
18631863

18641864
return collection.ReplaceOne(new ExpressionFilterDefinition<TDocument>(filter), replacement, options, cancellationToken);
18651865
}
18661866

1867+
/// <summary>
1868+
/// Replaces a single document.
1869+
/// </summary>
1870+
/// <typeparam name="TDocument">The type of the document.</typeparam>
1871+
/// <param name="collection">The collection.</param>
1872+
/// <param name="filter">The filter.</param>
1873+
/// <param name="replacement">The replacement.</param>
1874+
/// <param name="options">The options.</param>
1875+
/// <param name="cancellationToken">The cancellation token.</param>
1876+
/// <returns>
1877+
/// The result of the replacement.
1878+
/// </returns>
1879+
[Obsolete("Use the overload that takes a ReplaceOptions instead of an UpdateOptions.")]
1880+
public static ReplaceOneResult ReplaceOne<TDocument>(this IMongoCollection<TDocument> collection, Expression<Func<TDocument, bool>> filter, TDocument replacement, UpdateOptions options, CancellationToken cancellationToken = default(CancellationToken))
1881+
{
1882+
Ensure.IsNotNull(collection, nameof(collection));
1883+
Ensure.IsNotNull(filter, nameof(filter));
1884+
1885+
#pragma warning disable 618
1886+
return collection.ReplaceOne(new ExpressionFilterDefinition<TDocument>(filter), replacement, options, cancellationToken);
1887+
#pragma warning restore 618
1888+
}
1889+
1890+
/// <summary>
1891+
/// Replaces a single document.
1892+
/// </summary>
1893+
/// <typeparam name="TDocument">The type of the document.</typeparam>
1894+
/// <param name="collection">The collection.</param>
1895+
/// <param name="session">The session.</param>
1896+
/// <param name="filter">The filter.</param>
1897+
/// <param name="replacement">The replacement.</param>
1898+
/// <param name="options">The options.</param>
1899+
/// <param name="cancellationToken">The cancellation token.</param>
1900+
/// <returns>
1901+
/// The result of the replacement.
1902+
/// </returns>
1903+
public static ReplaceOneResult ReplaceOne<TDocument>(this IMongoCollection<TDocument> collection, IClientSessionHandle session, Expression<Func<TDocument, bool>> filter, TDocument replacement, ReplaceOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
1904+
{
1905+
Ensure.IsNotNull(collection, nameof(collection));
1906+
Ensure.IsNotNull(session, nameof(session));
1907+
Ensure.IsNotNull(filter, nameof(filter));
1908+
1909+
return collection.ReplaceOne(session, new ExpressionFilterDefinition<TDocument>(filter), replacement, options, cancellationToken);
1910+
}
1911+
18671912
/// <summary>
18681913
/// Replaces a single document.
18691914
/// </summary>
@@ -1877,13 +1922,16 @@ public static IFindFluent<TDocument, TDocument> Find<TDocument>(this IMongoColle
18771922
/// <returns>
18781923
/// The result of the replacement.
18791924
/// </returns>
1880-
public static ReplaceOneResult ReplaceOne<TDocument>(this IMongoCollection<TDocument> collection, IClientSessionHandle session, Expression<Func<TDocument, bool>> filter, TDocument replacement, UpdateOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
1925+
[Obsolete("Use the overload that takes a ReplaceOptions instead of an UpdateOptions.")]
1926+
public static ReplaceOneResult ReplaceOne<TDocument>(this IMongoCollection<TDocument> collection, IClientSessionHandle session, Expression<Func<TDocument, bool>> filter, TDocument replacement, UpdateOptions options, CancellationToken cancellationToken = default(CancellationToken))
18811927
{
18821928
Ensure.IsNotNull(collection, nameof(collection));
18831929
Ensure.IsNotNull(session, nameof(session));
18841930
Ensure.IsNotNull(filter, nameof(filter));
18851931

1932+
#pragma warning disable 618
18861933
return collection.ReplaceOne(session, new ExpressionFilterDefinition<TDocument>(filter), replacement, options, cancellationToken);
1934+
#pragma warning restore 618
18871935
}
18881936

18891937
/// <summary>
@@ -1898,14 +1946,59 @@ public static IFindFluent<TDocument, TDocument> Find<TDocument>(this IMongoColle
18981946
/// <returns>
18991947
/// The result of the replacement.
19001948
/// </returns>
1901-
public static Task<ReplaceOneResult> ReplaceOneAsync<TDocument>(this IMongoCollection<TDocument> collection, Expression<Func<TDocument, bool>> filter, TDocument replacement, UpdateOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
1949+
public static Task<ReplaceOneResult> ReplaceOneAsync<TDocument>(this IMongoCollection<TDocument> collection, Expression<Func<TDocument, bool>> filter, TDocument replacement, ReplaceOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
19021950
{
19031951
Ensure.IsNotNull(collection, nameof(collection));
19041952
Ensure.IsNotNull(filter, nameof(filter));
19051953

19061954
return collection.ReplaceOneAsync(new ExpressionFilterDefinition<TDocument>(filter), replacement, options, cancellationToken);
19071955
}
19081956

1957+
/// <summary>
1958+
/// Replaces a single document.
1959+
/// </summary>
1960+
/// <typeparam name="TDocument">The type of the document.</typeparam>
1961+
/// <param name="collection">The collection.</param>
1962+
/// <param name="filter">The filter.</param>
1963+
/// <param name="replacement">The replacement.</param>
1964+
/// <param name="options">The options.</param>
1965+
/// <param name="cancellationToken">The cancellation token.</param>
1966+
/// <returns>
1967+
/// The result of the replacement.
1968+
/// </returns>
1969+
[Obsolete("Use the overload that takes a ReplaceOptions instead of an UpdateOptions.")]
1970+
public static Task<ReplaceOneResult> ReplaceOneAsync<TDocument>(this IMongoCollection<TDocument> collection, Expression<Func<TDocument, bool>> filter, TDocument replacement, UpdateOptions options, CancellationToken cancellationToken = default(CancellationToken))
1971+
{
1972+
Ensure.IsNotNull(collection, nameof(collection));
1973+
Ensure.IsNotNull(filter, nameof(filter));
1974+
1975+
#pragma warning disable 618
1976+
return collection.ReplaceOneAsync(new ExpressionFilterDefinition<TDocument>(filter), replacement, options, cancellationToken);
1977+
#pragma warning restore 618
1978+
}
1979+
1980+
/// <summary>
1981+
/// Replaces a single document.
1982+
/// </summary>
1983+
/// <typeparam name="TDocument">The type of the document.</typeparam>
1984+
/// <param name="collection">The collection.</param>
1985+
/// <param name="session">The session.</param>
1986+
/// <param name="filter">The filter.</param>
1987+
/// <param name="replacement">The replacement.</param>
1988+
/// <param name="options">The options.</param>
1989+
/// <param name="cancellationToken">The cancellation token.</param>
1990+
/// <returns>
1991+
/// The result of the replacement.
1992+
/// </returns>
1993+
public static Task<ReplaceOneResult> ReplaceOneAsync<TDocument>(this IMongoCollection<TDocument> collection, IClientSessionHandle session, Expression<Func<TDocument, bool>> filter, TDocument replacement, ReplaceOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
1994+
{
1995+
Ensure.IsNotNull(collection, nameof(collection));
1996+
Ensure.IsNotNull(session, nameof(session));
1997+
Ensure.IsNotNull(filter, nameof(filter));
1998+
1999+
return collection.ReplaceOneAsync(session, new ExpressionFilterDefinition<TDocument>(filter), replacement, options, cancellationToken);
2000+
}
2001+
19092002
/// <summary>
19102003
/// Replaces a single document.
19112004
/// </summary>
@@ -1919,13 +2012,16 @@ public static IFindFluent<TDocument, TDocument> Find<TDocument>(this IMongoColle
19192012
/// <returns>
19202013
/// The result of the replacement.
19212014
/// </returns>
1922-
public static Task<ReplaceOneResult> ReplaceOneAsync<TDocument>(this IMongoCollection<TDocument> collection, IClientSessionHandle session, Expression<Func<TDocument, bool>> filter, TDocument replacement, UpdateOptions options = null, CancellationToken cancellationToken = default(CancellationToken))
2015+
[Obsolete("Use the overload that takes a ReplaceOptions instead of an UpdateOptions.")]
2016+
public static Task<ReplaceOneResult> ReplaceOneAsync<TDocument>(this IMongoCollection<TDocument> collection, IClientSessionHandle session, Expression<Func<TDocument, bool>> filter, TDocument replacement, UpdateOptions options, CancellationToken cancellationToken = default(CancellationToken))
19232017
{
19242018
Ensure.IsNotNull(collection, nameof(collection));
19252019
Ensure.IsNotNull(session, nameof(session));
19262020
Ensure.IsNotNull(filter, nameof(filter));
19272021

2022+
#pragma warning disable 618
19282023
return collection.ReplaceOneAsync(session, new ExpressionFilterDefinition<TDocument>(filter), replacement, options, cancellationToken);
2024+
#pragma warning restore 618
19292025
}
19302026

19312027
/// <summary>

0 commit comments

Comments
 (0)