using MongoDB.Driver; using MongoDB.Driver.Linq; namespace MongoBools { internal class MongoDBLinqV3BoolFieldRepro { public class TestClass { public bool BoolField; public bool BoolProperty { get; set; } } static async Task Main(string[] args) { var clientSettings = MongoClientSettings.FromConnectionString("mongodb+srv://username:password@host.jfazg.mongodb.net/Test?retryWrites=true&w=majority&maxPoolSize=400&waitQueueMultiple=10"); clientSettings.LinqProvider = LinqProvider.V2; var clientV2 = new MongoClient(clientSettings); clientSettings.LinqProvider = LinqProvider.V3; var clientV3 = new MongoClient(clientSettings); var dbV2 = clientV2.GetDatabase("Test"); var dbV3 = clientV3.GetDatabase("Test"); var testV2 = dbV2.GetCollection("Test"); var testV3 = dbV3.GetCollection("Test"); // Produces {"BoolField":true} var findFieldV2 = testV2.Find(x => x.BoolField).ToString(); // Produces {"BoolProperty":true} var findPropertyV2 = testV2.Find(x => x.BoolProperty).ToString(); // Produces {"BoolField":true} var findFieldBuilderV2 = testV2.Find(Builders.Filter.Eq(x => x.BoolField, true)).ToString(); // Produces {"BoolProperty":true} var findPropertyBuilderV2 = testV2.Find(Builders.Filter.Eq(x => x.BoolProperty, true)).ToString(); // Produces {"$expr":"$BoolField"} var findFieldV3 = testV3.Find(x => x.BoolField).ToString(); // Produces {"BoolProperty":true} var findPropertyV3 = testV3.Find(x => x.BoolProperty).ToString(); // Produces {"BoolField":true} var findFieldBuilderV3 = testV3.Find(Builders.Filter.Eq(x => x.BoolField, true)).ToString(); // Produces {"BoolProperty":true} var findPropertyBuilderV3 = testV3.Find(Builders.Filter.Eq(x => x.BoolProperty, true)).ToString(); // Produces {"BoolField":{"$ne":true}} var negFindFieldV2 = testV2.Find(x => !x.BoolField).ToString(); // Produces {"BoolProperty":{"$ne":true}} var negFindPropertyV2 = testV2.Find(x => !x.BoolProperty).ToString(); // Produces {"BoolField":false} var negFindFieldBuilderV2 = testV2.Find(Builders.Filter.Eq(x => x.BoolField, false)).ToString(); // Produces {"BoolProperty":false} var negFindPropertyBuilderV2 = testV2.Find(Builders.Filter.Eq(x => x.BoolProperty, false)).ToString(); // Produces {"$nor":[{"$expr":"$BoolField"}]} var negFindFieldV3 = testV3.Find(x => !x.BoolField).ToString(); // Produces {"BoolProperty":{"$ne":true}} var negFindPropertyV3 = testV3.Find(x => !x.BoolProperty).ToString(); // Produces {"BoolField":false} var negFindFieldBuilderV3 = testV3.Find(Builders.Filter.Eq(x => x.BoolField, false)).ToString(); // Produces {"BoolProperty":false} var negFindPropertyBuilderV3 = testV3.Find(Builders.Filter.Eq(x => x.BoolProperty, false)).ToString(); ; } } }