Skip to content

Commit 3d5ef5a

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

File tree

3 files changed

+46
-1
lines changed

3 files changed

+46
-1
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+
#### $min
758+
759+
```csharp
760+
p => p.FavoriteNumbers.Min()
761+
```
762+
```json
763+
{ $min: '$FavoriteNumbers' }
764+
```
765+
757766
#### $size
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
@@ -474,6 +474,28 @@ public async Task Should_translate_millisecond()
474474
result.Value.Result.Should().Be(16);
475475
}
476476

477+
[Test]
478+
[RequiresServer(MinimumVersion = "3.1.7")]
479+
public async Task Should_translate_min()
480+
{
481+
var result = await Project(x => new { Result = x.M.Min() });
482+
483+
result.Projection.Should().Be("{ Result: { \"$min\": \"$M\" }, _id: 0 }");
484+
485+
result.Value.Result.Should().Be(2);
486+
}
487+
488+
[Test]
489+
[RequiresServer(MinimumVersion = "3.1.7")]
490+
public async Task Should_translate_min_with_selector()
491+
{
492+
var result = await Project(x => new { Result = x.G.Min(g => g.E.F) });
493+
494+
result.Projection.Should().Be("{ Result: { \"$min\": \"$G.E.F\" }, _id: 0 }");
495+
496+
result.Value.Result.Should().Be(33);
497+
}
498+
477499
[Test]
478500
public async Task Should_translate_minute()
479501
{

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,8 @@ private BsonValue TranslatePipeline(PipelineExpression node)
395395
TryTranslateAllResultOperator(node, out result) ||
396396
TryTranslateAnyResultOperator(node, out result) ||
397397
TryTranslateContainsResultOperator(node, out result) ||
398-
TryTranslateCountResultOperator(node, out result))
398+
TryTranslateCountResultOperator(node, out result) ||
399+
TryTranslateMinResultOperator(node, out result))
399400
{
400401
return result;
401402
}
@@ -623,6 +624,19 @@ private bool TryTranslateHashSetMethodCall(MethodCallExpression node, out BsonVa
623624
return false;
624625
}
625626

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

0 commit comments

Comments
 (0)