Skip to content

Commit d64b997

Browse files
committed
CSHARP-1410: Allow $type to support string representations of type.
1 parent 43e6263 commit d64b997

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/MongoDB.Driver.Tests/FilterDefinitionBuilderTests.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -816,6 +816,14 @@ public void Type()
816816
Assert(subject.Type("x", BsonType.String), "{x: {$type: 2}}");
817817
}
818818

819+
[Test]
820+
public void Type_string()
821+
{
822+
var subject = CreateSubject<BsonDocument>();
823+
824+
Assert(subject.Type("x", "string"), "{x: {$type: \"string\"}}");
825+
}
826+
819827
[Test]
820828
public void Type_Typed()
821829
{
@@ -824,6 +832,14 @@ public void Type_Typed()
824832
Assert(subject.Type("FirstName", BsonType.String), "{fn: {$type: 2}}");
825833
}
826834

835+
[Test]
836+
public void Type_Typed_string()
837+
{
838+
var subject = CreateSubject<Person>();
839+
Assert(subject.Type(x => x.FirstName, "string"), "{fn: {$type: \"string\"}}");
840+
Assert(subject.Type("FirstName", "string"), "{fn: {$type: \"string\"}}");
841+
}
842+
827843
private void Assert<TDocument>(FilterDefinition<TDocument> filter, string expected)
828844
{
829845
Assert(filter, BsonDocument.Parse(expected));

src/MongoDB.Driver/FilterDefinitionBuilder.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,6 +1144,17 @@ public FilterDefinition<TDocument> Type(FieldDefinition<TDocument> field, BsonTy
11441144
return new OperatorFilterDefinition<TDocument>("$type", field, (int)type);
11451145
}
11461146

1147+
/// <summary>
1148+
/// Creates a type filter.
1149+
/// </summary>
1150+
/// <param name="field">The field.</param>
1151+
/// <param name="type">The type.</param>
1152+
/// <returns>A type filter.</returns>
1153+
public FilterDefinition<TDocument> Type(FieldDefinition<TDocument> field, string type)
1154+
{
1155+
return new OperatorFilterDefinition<TDocument>("$type", field, type);
1156+
}
1157+
11471158
/// <summary>
11481159
/// Creates a type filter.
11491160
/// </summary>
@@ -1154,6 +1165,16 @@ public FilterDefinition<TDocument> Type(Expression<Func<TDocument, object>> fiel
11541165
{
11551166
return Type(new ExpressionFieldDefinition<TDocument>(field), type);
11561167
}
1168+
/// <summary>
1169+
/// Creates a type filter.
1170+
/// </summary>
1171+
/// <param name="field">The field.</param>
1172+
/// <param name="type">The type.</param>
1173+
/// <returns>A type filter.</returns>
1174+
public FilterDefinition<TDocument> Type(Expression<Func<TDocument, object>> field, string type)
1175+
{
1176+
return Type(new ExpressionFieldDefinition<TDocument>(field), type);
1177+
}
11571178

11581179
/// <summary>
11591180
/// Creates a filter based on the expression.

0 commit comments

Comments
 (0)