Skip to content

Commit ec54850

Browse files
committed
CSHARP-1373: added $max expression support.
1 parent 3d5ef5a commit ec54850

File tree

3 files changed

+45
-0
lines changed

3 files changed

+45
-0
lines changed

Docs/reference/content/reference/driver/expressions.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,15 @@ p => p.FavoriteNumbers.Concat(new [] { 1, 2, 3 })
754754
{ $concatArrays: ['$FavoriteNumbers', [1, 2, 3]] }
755755
```
756756

757+
#### $max
758+
759+
```csharp
760+
p => p.FavoriteNumbers.Max()
761+
```
762+
```json
763+
{ $max: '$FavoriteNumbers' }
764+
```
765+
757766
#### $min
758767

759768
```csharp

src/MongoDB.Driver.Tests/Linq/Translators/AggregateProjectTranslatorTests.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,28 @@ public async Task Should_translate_map_with_value()
463463
result.Value.Result.Should().Equal("it0", "icky0");
464464
}
465465

466+
[Test]
467+
[RequiresServer(MinimumVersion = "3.1.7")]
468+
public async Task Should_translate_max()
469+
{
470+
var result = await Project(x => new { Result = x.M.Max() });
471+
472+
result.Projection.Should().Be("{ Result: { \"$max\": \"$M\" }, _id: 0 }");
473+
474+
result.Value.Result.Should().Be(5);
475+
}
476+
477+
[Test]
478+
[RequiresServer(MinimumVersion = "3.1.7")]
479+
public async Task Should_translate_max_with_selector()
480+
{
481+
var result = await Project(x => new { Result = x.G.Max(g => g.E.F) });
482+
483+
result.Projection.Should().Be("{ Result: { \"$max\": \"$G.E.F\" }, _id: 0 }");
484+
485+
result.Value.Result.Should().Be(55);
486+
}
487+
466488
[Test]
467489
[RequiresServer(MinimumVersion = "2.4.0")]
468490
public async Task Should_translate_millisecond()

src/MongoDB.Driver/Linq/Translators/AggregateLanguageTranslator.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,7 @@ private BsonValue TranslatePipeline(PipelineExpression node)
396396
TryTranslateAnyResultOperator(node, out result) ||
397397
TryTranslateContainsResultOperator(node, out result) ||
398398
TryTranslateCountResultOperator(node, out result) ||
399+
TryTranslateMaxResultOperator(node, out result) ||
399400
TryTranslateMinResultOperator(node, out result))
400401
{
401402
return result;
@@ -624,6 +625,19 @@ private bool TryTranslateHashSetMethodCall(MethodCallExpression node, out BsonVa
624625
return false;
625626
}
626627

628+
private bool TryTranslateMaxResultOperator(PipelineExpression node, out BsonValue result)
629+
{
630+
var resultOperator = node.ResultOperator as MaxResultOperator;
631+
if (resultOperator != null)
632+
{
633+
result = new BsonDocument("$max", TranslateValue(node.Source));
634+
return true;
635+
}
636+
637+
result = null;
638+
return false;
639+
}
640+
627641
private bool TryTranslateMinResultOperator(PipelineExpression node, out BsonValue result)
628642
{
629643
var resultOperator = node.ResultOperator as MinResultOperator;

0 commit comments

Comments
 (0)