diff --git a/Src/Asp.NetCore2/MongoDbTest/UnitTest/QueryWhere.cs b/Src/Asp.NetCore2/MongoDbTest/UnitTest/QueryWhere.cs index 2d9be2c4f..6ff93f4b0 100644 --- a/Src/Asp.NetCore2/MongoDbTest/UnitTest/QueryWhere.cs +++ b/Src/Asp.NetCore2/MongoDbTest/UnitTest/QueryWhere.cs @@ -26,6 +26,16 @@ namespace MongoDbTest //根据bool过滤 FilterStudentsByBool(db); + + //更多 + InsertAndValidateStudent(db); + } + + private static void InsertAndValidateStudent(SqlSugarClient db) + { + db.Insertable(new Student() { Name = "", Bool = true, CreateDateTime = DateTime.Now }).ExecuteCommand(); + var list = db.Queryable().Where(it => string.IsNullOrEmpty(it.Name)).ToList(); + if (!string.IsNullOrEmpty(list.First().Name)) Cases.ThrowUnitError(); } private static void FilterStudentsByBool(SqlSugar.SqlSugarClient db) diff --git a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs index cd21086c4..83670f215 100644 --- a/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs +++ b/Src/Asp.NetCore2/SqlSugar.MongoDbCore/MongoDb/SqlBuilder/MongoDbExpressionContext.cs @@ -570,16 +570,21 @@ namespace SqlSugar.MongoDb public override string IsNullOrEmpty(MethodCallExpressionModel model) { - // 判断字符串是否为 null 或空字符串 + // 获取字段名表达式 var item = model.Args[0].MemberValue ?? model.DataObject; - BsonValue memberName = new ExpressionVisitor(context).Visit(item as Expression); - // $or: [ { $eq: [ "$field", null ] }, { $eq: [ "$field", "" ] } ] - var orDoc = new BsonDocument("$or", new BsonArray - { - new BsonDocument("$eq", new BsonArray { $"${memberName}", BsonNull.Value }), - new BsonDocument("$eq", new BsonArray { $"${memberName}", "" }) - }); - return orDoc.ToJson(UtilMethods.GetJsonWriterSettings()); + var fieldExpr = new ExpressionVisitor(context).Visit(item as Expression); + + string fieldName = fieldExpr.ToString(); + + // 生成:{ "$match": { "$or": [ { "Name": null }, { "Name": "" } ] } } + var or=new BsonDocument( + "$or", new BsonArray + { + new BsonDocument(fieldName, BsonNull.Value), + new BsonDocument(fieldName, "") + }); + + return or.ToJson(UtilMethods.GetJsonWriterSettings()); } public override string Trim(MethodCallExpressionModel model)