@@ -423,7 +423,7 @@ public FilterDefinition<TDocument> ElemMatch<TItem>(Expression<Func<TDocument, I
423
423
/// <returns>An equality filter.</returns>
424
424
public FilterDefinition < TDocument > Eq < TField > ( FieldDefinition < TDocument , TField > field , TField value )
425
425
{
426
- return new SimpleFilterDefinition < TDocument , TField > ( field , value ) ;
426
+ return new SimpleFilterDefinition < TDocument , TField > ( field , value , allowScalarValueForArrayField : true ) ;
427
427
}
428
428
429
429
/// <summary>
@@ -661,7 +661,7 @@ public FilterDefinition<TDocument> Gt(FieldDefinition<TDocument, ulong> field, u
661
661
/// <returns>A greater than filter.</returns>
662
662
public FilterDefinition < TDocument > Gt < TField > ( FieldDefinition < TDocument , TField > field , TField value )
663
663
{
664
- return new OperatorFilterDefinition < TDocument , TField > ( "$gt" , field , value ) ;
664
+ return new OperatorFilterDefinition < TDocument , TField > ( "$gt" , field , value , allowScalarValueForArrayField : true ) ;
665
665
}
666
666
667
667
/// <summary>
@@ -733,7 +733,7 @@ public FilterDefinition<TDocument> Gte(FieldDefinition<TDocument, ulong> field,
733
733
/// <returns>A greater than or equal filter.</returns>
734
734
public FilterDefinition < TDocument > Gte < TField > ( FieldDefinition < TDocument , TField > field , TField value )
735
735
{
736
- return new OperatorFilterDefinition < TDocument , TField > ( "$gte" , field , value ) ;
736
+ return new OperatorFilterDefinition < TDocument , TField > ( "$gte" , field , value , allowScalarValueForArrayField : true ) ;
737
737
}
738
738
739
739
/// <summary>
@@ -781,7 +781,7 @@ public FilterDefinition<TDocument> Gte<TField>(Expression<Func<TDocument, TField
781
781
/// <returns>An in filter.</returns>
782
782
public FilterDefinition < TDocument > In < TField > ( FieldDefinition < TDocument , TField > field , IEnumerable < TField > values )
783
783
{
784
- return new SingleItemAsArrayOperatorFilterDefinition < TDocument , TField > ( "$in" , field , values ) ;
784
+ return new SingleItemAsArrayOperatorFilterDefinition < TDocument , TField > ( "$in" , field , values , allowScalarValueForArrayField : true ) ;
785
785
}
786
786
787
787
/// <summary>
@@ -803,7 +803,7 @@ public FilterDefinition<TDocument> In<TField>(Expression<Func<TDocument, TField>
803
803
/// <returns>A schema filter.</returns>
804
804
public FilterDefinition < TDocument > JsonSchema ( BsonDocument schema )
805
805
{
806
- return new BsonDocumentFilterDefinition < TDocument > ( new BsonDocument ( "$jsonSchema" , schema ) ) ;
806
+ return new BsonDocumentFilterDefinition < TDocument > ( new BsonDocument ( "$jsonSchema" , schema ) ) ;
807
807
}
808
808
809
809
/// <summary>
@@ -839,7 +839,7 @@ public FilterDefinition<TDocument> Lt(FieldDefinition<TDocument, ulong> field, u
839
839
/// <returns>A less than filter.</returns>
840
840
public FilterDefinition < TDocument > Lt < TField > ( FieldDefinition < TDocument , TField > field , TField value )
841
841
{
842
- return new OperatorFilterDefinition < TDocument , TField > ( "$lt" , field , value ) ;
842
+ return new OperatorFilterDefinition < TDocument , TField > ( "$lt" , field , value , allowScalarValueForArrayField : true ) ;
843
843
}
844
844
845
845
/// <summary>
@@ -911,7 +911,7 @@ public FilterDefinition<TDocument> Lte(FieldDefinition<TDocument, ulong> field,
911
911
/// <returns>A less than or equal filter.</returns>
912
912
public FilterDefinition < TDocument > Lte < TField > ( FieldDefinition < TDocument , TField > field , TField value )
913
913
{
914
- return new OperatorFilterDefinition < TDocument , TField > ( "$lte" , field , value ) ;
914
+ return new OperatorFilterDefinition < TDocument , TField > ( "$lte" , field , value , allowScalarValueForArrayField : true ) ;
915
915
}
916
916
917
917
/// <summary>
@@ -983,7 +983,7 @@ public FilterDefinition<TDocument> Mod(Expression<Func<TDocument, object>> field
983
983
/// <returns>A not equal filter.</returns>
984
984
public FilterDefinition < TDocument > Ne < TField > ( FieldDefinition < TDocument , TField > field , TField value )
985
985
{
986
- return new OperatorFilterDefinition < TDocument , TField > ( "$ne" , field , value ) ;
986
+ return new OperatorFilterDefinition < TDocument , TField > ( "$ne" , field , value , allowScalarValueForArrayField : true ) ;
987
987
}
988
988
989
989
/// <summary>
@@ -2019,17 +2019,23 @@ internal sealed class OperatorFilterDefinition<TDocument, TField> : FilterDefini
2019
2019
private readonly string _operatorName ;
2020
2020
private readonly FieldDefinition < TDocument , TField > _field ;
2021
2021
private readonly TField _value ;
2022
+ private readonly bool _allowScalarValueForArrayField ;
2022
2023
2023
- public OperatorFilterDefinition ( string operatorName , FieldDefinition < TDocument , TField > field , TField value )
2024
+ public OperatorFilterDefinition (
2025
+ string operatorName ,
2026
+ FieldDefinition < TDocument , TField > field ,
2027
+ TField value ,
2028
+ bool allowScalarValueForArrayField = false )
2024
2029
{
2025
2030
_operatorName = Ensure . IsNotNull ( operatorName , operatorName ) ;
2026
2031
_field = Ensure . IsNotNull ( field , nameof ( field ) ) ;
2027
2032
_value = value ;
2033
+ _allowScalarValueForArrayField = allowScalarValueForArrayField ;
2028
2034
}
2029
2035
2030
2036
public override BsonDocument Render ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry )
2031
2037
{
2032
- var renderedField = _field . Render ( documentSerializer , serializerRegistry ) ;
2038
+ var renderedField = _field . Render ( documentSerializer , serializerRegistry , _allowScalarValueForArrayField ) ;
2033
2039
2034
2040
var document = new BsonDocument ( ) ;
2035
2041
using ( var bsonWriter = new BsonDocumentWriter ( document ) )
@@ -2108,16 +2114,21 @@ internal sealed class SimpleFilterDefinition<TDocument, TField> : FilterDefiniti
2108
2114
{
2109
2115
private readonly FieldDefinition < TDocument , TField > _field ;
2110
2116
private readonly TField _value ;
2117
+ private readonly bool _allowScalarValueForArrayField ;
2111
2118
2112
- public SimpleFilterDefinition ( FieldDefinition < TDocument , TField > field , TField value )
2119
+ public SimpleFilterDefinition (
2120
+ FieldDefinition < TDocument , TField > field ,
2121
+ TField value ,
2122
+ bool allowScalarValueForArrayField = false )
2113
2123
{
2114
2124
_field = Ensure . IsNotNull ( field , nameof ( field ) ) ;
2115
2125
_value = value ;
2126
+ _allowScalarValueForArrayField = allowScalarValueForArrayField ;
2116
2127
}
2117
2128
2118
2129
public override BsonDocument Render ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry )
2119
2130
{
2120
- var renderedField = _field . Render ( documentSerializer , serializerRegistry ) ;
2131
+ var renderedField = _field . Render ( documentSerializer , serializerRegistry , _allowScalarValueForArrayField ) ;
2121
2132
2122
2133
var document = new BsonDocument ( ) ;
2123
2134
using ( var bsonWriter = new BsonDocumentWriter ( document ) )
@@ -2138,17 +2149,23 @@ internal sealed class SingleItemAsArrayOperatorFilterDefinition<TDocument, TFiel
2138
2149
private readonly string _operatorName ;
2139
2150
private readonly FieldDefinition < TDocument , TField > _field ;
2140
2151
private readonly IEnumerable < TField > _values ;
2152
+ private readonly bool _allowScalarValueForArrayField ;
2141
2153
2142
- public SingleItemAsArrayOperatorFilterDefinition ( string operatorName , FieldDefinition < TDocument , TField > field , IEnumerable < TField > values )
2154
+ public SingleItemAsArrayOperatorFilterDefinition (
2155
+ string operatorName ,
2156
+ FieldDefinition < TDocument , TField > field ,
2157
+ IEnumerable < TField > values ,
2158
+ bool allowScalarValueForArrayField = false )
2143
2159
{
2144
2160
_operatorName = Ensure . IsNotNull ( operatorName , operatorName ) ;
2145
2161
_field = Ensure . IsNotNull ( field , nameof ( field ) ) ;
2146
2162
_values = Ensure . IsNotNull ( values , nameof ( values ) ) ;
2163
+ _allowScalarValueForArrayField = allowScalarValueForArrayField ;
2147
2164
}
2148
2165
2149
2166
public override BsonDocument Render ( IBsonSerializer < TDocument > documentSerializer , IBsonSerializerRegistry serializerRegistry )
2150
2167
{
2151
- var renderedField = _field . Render ( documentSerializer , serializerRegistry ) ;
2168
+ var renderedField = _field . Render ( documentSerializer , serializerRegistry , _allowScalarValueForArrayField ) ;
2152
2169
2153
2170
var document = new BsonDocument ( ) ;
2154
2171
using ( var bsonWriter = new BsonDocumentWriter ( document ) )
0 commit comments