-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Unknown
-
Affects Version/s: None
-
Component/s: None
-
None
-
None
-
Fully Compatible
-
Dotnet Drivers
-
Not Needed
-
None
-
None
-
None
-
None
-
None
-
None
Summary
Client-side projection (EnableClientSideProjections=true) of a property marked with [{}}}BsonIgnore\{*}{\{{}*] leads to an exception:
System.InvalidOperationException : Serializer for MongoCases.MongoCases_Linq3_Project_WithIgnoreField+UserDbo does not have a member named MainEmail. at MongoDB.Driver.Linq.Linq3Implementation.Misc.DocumentSerializerHelper.GetMemberSerializationInfo(IBsonSerializer serializer, String memberName) at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.MemberExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, MemberExpression expression) at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.ExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, Expression expression) at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.MemberInitExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, Expression expression, NewExpression newExpression, IReadOnlyList`1 bindings) at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.NewExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, NewExpression expression) at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.ExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, Expression expression) at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.ExpressionToAggregationExpressionTranslator.TranslateLambdaBody(TranslationContext context, LambdaExpression lambdaExpression, Symbol parameterSymbol) at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.ExpressionToAggregationExpressionTranslator.TranslateLambdaBody(TranslationContext context, LambdaExpression lambdaExpression, IBsonSerializer parameterSerializer, Boolean asRoot) at MongoDB.Driver.Linq.LinqProviderAdapter.TranslateExpressionToProjection[TInput,TOutput](Expression`1 expression, IBsonSerializer`1 inputSerializer, ExpressionTranslationOptions translationOptions, Boolean forFind) at MongoDB.Driver.Linq.LinqProviderAdapter.TranslateExpressionToFindProjection[TSource,TProjection](Expression`1 expression, IBsonSerializer`1 sourceSerializer, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions) at MongoDB.Driver.FindExpressionProjectionDefinition`2.Render(RenderArgs`1 args)
<PackageReference Include="MongoDB.Bson" Version="3.5.2" />
<PackageReference Include="MongoDB.Driver" Version="3.5.2" />
How to Reproduce
[TestFixture] public class MongoCases_Linq3_Project_WithIgnoreField { [Test] public async Task Test() { BsonSerializer.TryRegisterSerializer(new GuidSerializer(GuidRepresentation.CSharpLegacy)); var mongoClientSettings = MongoClientSettings.FromConnectionString("mongodb://localhost:27017"); var mongoClient = new MongoClient(mongoClientSettings); var db = mongoClient.GetDatabase(Guid.NewGuid().ToString()[..8]); var collection = db.GetCollection<UserDbo>("users"); var guid = Guid.NewGuid(); var userDbo = new UserDbo { Id = guid }; await collection.InsertOneAsync(userDbo); var query = collection .Find(Builders<UserDbo>.Filter.Empty, new FindOptions { TranslationOptions = new ExpressionTranslationOptions { EnableClientSideProjections = true } }) .Project(x => new UserDto(x.Id, x.MainEmail)); var userInfo = await query.FirstOrDefaultAsync(); // System.InvalidOperationException : Serializer for MongoCases.MongoCases_Linq3_Project_WithIgnoreField+UserDbo does not have a member named MainEmail. // at MongoDB.Driver.Linq.Linq3Implementation.Misc.DocumentSerializerHelper.GetMemberSerializationInfo(IBsonSerializer serializer, String memberName) // at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.MemberExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, MemberExpression expression) // at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.ExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, Expression expression) // at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.MemberInitExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, Expression expression, NewExpression newExpression, IReadOnlyList`1 bindings) // at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.NewExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, NewExpression expression) // at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.ExpressionToAggregationExpressionTranslator.Translate(TranslationContext context, Expression expression) // at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.ExpressionToAggregationExpressionTranslator.TranslateLambdaBody(TranslationContext context, LambdaExpression lambdaExpression, Symbol parameterSymbol) // at MongoDB.Driver.Linq.Linq3Implementation.Translators.ExpressionToAggregationExpressionTranslators.ExpressionToAggregationExpressionTranslator.TranslateLambdaBody(TranslationContext context, LambdaExpression lambdaExpression, IBsonSerializer parameterSerializer, Boolean asRoot) // at MongoDB.Driver.Linq.LinqProviderAdapter.TranslateExpressionToProjection[TInput,TOutput](Expression`1 expression, IBsonSerializer`1 inputSerializer, ExpressionTranslationOptions translationOptions, Boolean forFind) // at MongoDB.Driver.Linq.LinqProviderAdapter.TranslateExpressionToFindProjection[TSource,TProjection](Expression`1 expression, IBsonSerializer`1 sourceSerializer, IBsonSerializerRegistry serializerRegistry, ExpressionTranslationOptions translationOptions) // at MongoDB.Driver.FindExpressionProjectionDefinition`2.Render(RenderArgs`1 args) Assert.That(userInfo, Is.Not.Null); } private sealed class UserDto { public UserDto(Guid id, string? mainEmail) { Id = id; MainEmail = mainEmail; } public Guid Id { get; } public string? MainEmail { get; } } private class UserDbo { [BsonId] public Guid Id { get; set; } [BsonElement("emails"), BsonRequired] public IEnumerable<string> Emails { get; set; } [BsonIgnore] public string? MainEmail => Emails?.FirstOrDefault(); } }
Additional Background
Please provide any additional background information that may be helpful in diagnosing the bug.