async Task Main() { #region initialise MDB BsonSerializer.TryRegisterSerializer(new ObjectSerializer(type => ObjectSerializer.AllAllowedTypes(type))); var clientSettings = MongoClientSettings.FromConnectionString("mongodb://localhost:27017/?retryWrites=true"); clientSettings.LinqProvider = LinqProvider.V3; //<<<---- Change to V2 and the Projection Works clientSettings.ApplicationName = "Bug Demo"; clientSettings.ReadEncoding = new System.Text.UTF8Encoding(false, false); var dbClient = new MongoClient(clientSettings); Console.WriteLine(dbClient.GetType().Assembly.FullName); Console.WriteLine($"LinqProvider: {clientSettings.LinqProvider}"); Console.WriteLine("==================================="); var db = dbClient.GetDatabase("bugDb"); var clientAccountCollection = db.GetCollection("bankAccount"); #endregion const string BSB = "111222"; const string NUMBER = "0456789"; const long INTERNAL_ACCOUNT = 9876543210L; #region Setup Test Data if collection is empty if (await clientAccountCollection.CountDocumentsAsync(FilterDefinition.Empty) == 0) { var clientAccountModel = new ClientAccountModel { InternalAccountNumber = INTERNAL_ACCOUNT, Bank = new BankModel { Bsb = BSB, Number = NUMBER, } }; await clientAccountCollection.InsertOneAsync(clientAccountModel); } #endregion var filter = Builders.Filter.Eq(clientAccount => clientAccount.Bank.Number, NUMBER); var projection = Builders.Projection.Expression(clientAccount => clientAccount.Bank.Bsb); var result = await clientAccountCollection.Find(filter) .Project(projection) .FirstOrDefaultAsync(); if(result == null) Console.WriteLine("Result is NULL"); else Console.WriteLine(result == BSB ? $"Result: FOUND - [{result}]" : "Result: NOT FOUND"); } public class ClientAccountModel { [BsonConstructor] public ClientAccountModel() { } [BsonId] [BsonElement("internalAccountNumber")] [BsonRepresentation(BsonType.Int64)] [BsonRequired] public long InternalAccountNumber { get; set; } [BsonElement("bank")] [BsonIgnoreIfNull] public BankModel Bank { get; set; } } public class BankModel { [BsonConstructor] public BankModel() { } [BsonElement("bsb")] [BsonRepresentation(BsonType.String)] [BsonRequired] public string Bsb { get; set; } [BsonElement("number")] [BsonRepresentation(BsonType.String)] [BsonRequired] public string Number { get; set; } }