Skip to content

Commit 1fc28c5

Browse files
author
rstam
committed
Added overload of Matches method to SimpleQueryBuilder and QueryBuilder<TDocument> that takes a BsonRegularExpression argument.
1 parent 1c494d8 commit 1fc28c5

File tree

3 files changed

+61
-1
lines changed

3 files changed

+61
-1
lines changed

Driver/Builders/SimpleQueryBuilder.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,28 @@ public IMongoQuery LTE(string name, BsonValue value)
261261
return new QueryDocument(name, new BsonDocument("$lte", value));
262262
}
263263

264+
/// <summary>
265+
/// Tests that the value of the named element matches a regular expression (see $regex).
266+
/// </summary>
267+
/// <param name="name">The name of the element to test.</param>
268+
/// <param name="regex">The regex.</param>
269+
/// <returns>
270+
/// A query.
271+
/// </returns>
272+
public IMongoQuery Matches(string name, BsonRegularExpression regex)
273+
{
274+
if (name == null)
275+
{
276+
throw new ArgumentNullException("name");
277+
}
278+
if (regex == null)
279+
{
280+
throw new ArgumentNullException("regex");
281+
}
282+
283+
return new QueryDocument(name, regex);
284+
}
285+
264286
/// <summary>
265287
/// Tests that the value of the named element matches a regular expression (see $regex).
266288
/// </summary>

Driver/Builders/TypedQueryBuilder.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,20 @@ public IMongoQuery LTE<TMember>(Expression<Func<TDocument, TMember>> memberExpre
227227
return _queryBuilder.LTE(serializationInfo.ElementName, serializedValue);
228228
}
229229

230+
/// <summary>
231+
/// Tests that the value of the named element matches a regular expression (see $regex).
232+
/// </summary>
233+
/// <param name="memberExpression">The member expression representing the element to test.</param>
234+
/// <param name="regex">The regex.</param>
235+
/// <returns>
236+
/// A query.
237+
/// </returns>
238+
public IMongoQuery Matches(Expression<Func<TDocument, string>> memberExpression, BsonRegularExpression regex)
239+
{
240+
var serializationInfo = _serializationInfoHelper.GetSerializationInfo(memberExpression);
241+
return _queryBuilder.Matches(serializationInfo.ElementName, regex);
242+
}
243+
230244
/// <summary>
231245
/// Tests that the value of the named element matches a regular expression (see $regex).
232246
/// </summary>

DriverUnitTests/Builders/TypedQueryBuilderTests.cs

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,13 +344,37 @@ public void TestLessThanOrEqual_NotExpression()
344344
}
345345

346346
[Test]
347-
public void TestMatches()
347+
public void TestMatchesBsonRegularExpression()
348+
{
349+
var query = Query.Build<A>(qb => qb.Matches(a => a.S, new BsonRegularExpression("abc", "i")));
350+
var expected = "{ \"s\" : /abc/i }";
351+
Assert.AreEqual(expected, query.ToJson());
352+
}
353+
354+
[Test]
355+
public void TestMatchesPattern()
348356
{
349357
var query = Query.Build<A>(qb => qb.Matches(a => a.S, "abc"));
350358
var expected = "{ \"s\" : /abc/ }";
351359
Assert.AreEqual(expected, query.ToJson());
352360
}
353361

362+
[Test]
363+
public void TestMatchesPatternOptions()
364+
{
365+
var query = Query.Build<A>(qb => qb.Matches(a => a.S, "abc", "i"));
366+
var expected = "{ \"s\" : /abc/i }";
367+
Assert.AreEqual(expected, query.ToJson());
368+
}
369+
370+
[Test]
371+
public void TestMatchesRegex()
372+
{
373+
var query = Query.Build<A>(qb => qb.Matches(a => a.S, new Regex("abc", RegexOptions.IgnoreCase)));
374+
var expected = "{ \"s\" : /abc/i }";
375+
Assert.AreEqual(expected, query.ToJson());
376+
}
377+
354378
[Test]
355379
public void TestMatchesExpressionStringContains()
356380
{

0 commit comments

Comments
 (0)