forked from mongodb/mongo-csharp-driver
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathIFindFluent.cs
153 lines (140 loc) · 6.47 KB
/
IFindFluent.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/* Copyright 2010-present MongoDB Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Bson.Serialization;
namespace MongoDB.Driver
{
/// <summary>
/// Fluent interface for find.
/// </summary>
/// <remarks>
/// This interface is not guaranteed to remain stable. Implementors should use
/// <see cref="FindFluentBase{TDocument, TProjection}" />.
/// </remarks>
/// <typeparam name="TDocument">The type of the document.</typeparam>
/// <typeparam name="TProjection">The type of the projection (same as TDocument if there is no projection).</typeparam>
public interface IFindFluent<TDocument, TProjection> : IAsyncCursorSource<TProjection>
{
/// <summary>
/// Gets or sets the filter.
/// </summary>
FilterDefinition<TDocument> Filter { get; set; }
/// <summary>
/// Gets the options.
/// </summary>
FindOptions<TDocument, TProjection> Options { get; }
/// <summary>
/// A simplified type of projection that changes the result type by using a different serializer.
/// </summary>
/// <typeparam name="TResult">The type of the result.</typeparam>
/// <param name="resultSerializer">The result serializer.</param>
/// <returns>The fluent find interface.</returns>
IFindFluent<TDocument, TResult> As<TResult>(IBsonSerializer<TResult> resultSerializer = null);
/// <summary>
/// Counts the number of documents.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The count.</returns>
[Obsolete("Use CountDocuments instead.")]
long Count(CancellationToken cancellationToken = default(CancellationToken));
/// <summary>
/// Counts the number of documents.
/// </summary>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A Task whose result is the count.</returns>
[Obsolete("Use CountDocumentsAsync instead.")]
Task<long> CountAsync(CancellationToken cancellationToken = default(CancellationToken));
/// <summary>
/// Counts the number of documents.
/// </summary>
/// <remarks>
/// Note: when migrating from Count to CountDocuments the following query operations must be replaced:
///
/// <code>
/// +-------------+--------------------------------+
/// | Operator | Replacement |
/// +=============+================================+
/// | $where | $expr |
/// +-------------+--------------------------------+
/// | $near | $geoWithin with $center |
/// +-------------+--------------------------------+
/// | $nearSphere | $geoWithin with $centerSphere |
/// +-------------+--------------------------------+
/// </code>
/// </remarks>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>The count.</returns>
long CountDocuments(CancellationToken cancellationToken = default(CancellationToken));
/// <summary>
/// Counts the number of documents.
/// </summary>
/// <remarks>
/// Note: when migrating from CountAsync to CountDocumentsAsync the following query operations must be replaced:
///
/// <code>
/// +-------------+--------------------------------+
/// | Operator | Replacement |
/// +=============+================================+
/// | $where | $expr |
/// +-------------+--------------------------------+
/// | $near | $geoWithin with $center |
/// +-------------+--------------------------------+
/// | $nearSphere | $geoWithin with $centerSphere |
/// +-------------+--------------------------------+
/// </code>
/// </remarks>
/// <param name="cancellationToken">The cancellation token.</param>
/// <returns>A Task whose result is the count.</returns>
Task<long> CountDocumentsAsync(CancellationToken cancellationToken = default(CancellationToken));
/// <summary>
/// Limits the number of documents.
/// </summary>
/// <remarks>
/// Limit of zero or null is equivalent to setting no limit.
/// </remarks>
/// <param name="limit">The limit.</param>
/// <returns>The fluent find interface.</returns>
IFindFluent<TDocument, TProjection> Limit(int? limit);
/// <summary>
/// Projects the the result.
/// </summary>
/// <typeparam name="TNewProjection">The type of the projection.</typeparam>
/// <param name="projection">The projection.</param>
/// <returns>The fluent find interface.</returns>
IFindFluent<TDocument, TNewProjection> Project<TNewProjection>(ProjectionDefinition<TDocument, TNewProjection> projection);
/// <summary>
/// Skips the the specified number of documents.
/// </summary>
/// <param name="skip">The skip.</param>
/// <returns>The fluent find interface.</returns>
IFindFluent<TDocument, TProjection> Skip(int? skip);
/// <summary>
/// Sorts the the documents.
/// </summary>
/// <param name="sort">The sort.</param>
/// <returns>The fluent find interface.</returns>
IFindFluent<TDocument, TProjection> Sort(SortDefinition<TDocument> sort);
}
/// <summary>
/// Fluent interface for find.
/// </summary>
/// <typeparam name="TDocument">The type of the document.</typeparam>
/// <typeparam name="TProjection">The type of the projection (same as TDocument if there is no projection).</typeparam>
public interface IOrderedFindFluent<TDocument, TProjection> : IFindFluent<TDocument, TProjection>
{
}
}