Update mongodb

This commit is contained in:
sunkaixuan
2025-06-30 10:57:16 +08:00
parent 3eaf54a01f
commit 6ac476344f
4 changed files with 41 additions and 22 deletions

View File

@@ -66,9 +66,16 @@ namespace MongoDbTest
schoolName = sc.Name schoolName = sc.Name
}).ToList(); }).ToList();
if (dt5.First().studentName != "张三"&& dt5.First().schoolName!= "清华大学") Cases.ThrowUnitError(); if (dt5.First().studentName != "张三"&& dt5.First().schoolName!= "清华大学") Cases.ThrowUnitError();
var allList = db.Queryable<Student>().Where(s => s.Name == s.Name.ToString()) .ToList();
if(allList.Count!=2) Cases.ThrowUnitError();
var allList2 = db.Queryable<Student>().Where(s => s.Name.ToString() == s.Name).ToList();
if (allList2.Count != 2) Cases.ThrowUnitError();
var allList3 = db.Queryable<Student>().Where(s => s.Name.ToString() == s.Name.ToString()).ToList();
if (allList3.Count != 2) Cases.ThrowUnitError();
//var dt4 = db.Queryable<Student>() //var dt4 = db.Queryable<Student>()
//.LeftJoin<School>((s, sc) => s.SchoolId.ToLower() == sc.Id) //.LeftJoin<School>((s, sc) => s.SchoolId.ToString() == sc.Id.ToString())
//.Select((s,sc)=>new { //.Select((s, sc) => new
//{
// studentName = s.Name, // studentName = s.Name,
// schoolName = sc.Name // schoolName = sc.Name
//}).ToList(); //}).ToList();

View File

@@ -13,6 +13,10 @@ namespace SqlSugar.MongoDb
var mongoDbType = BinaryExpressionTranslator.GetComparisonType(expressionInfo.NodeType); var mongoDbType = BinaryExpressionTranslator.GetComparisonType(expressionInfo.NodeType);
var left = new ExpressionVisitor(_context).Visit(expressionInfo.LeftExp); var left = new ExpressionVisitor(_context).Visit(expressionInfo.LeftExp);
var right = new ExpressionVisitor(_context).Visit(expressionInfo.RightExp); var right = new ExpressionVisitor(_context).Visit(expressionInfo.RightExp);
if (leftIsMember && !UtilMethods.IsMongoVariable(left))
left = UtilMethods.GetMemberName(left);
if (rightIsMember && !UtilMethods.IsMongoVariable(right))
right = UtilMethods.GetMemberName(right);
var filter = new BsonDocument("$expr", new BsonDocument(mongoDbType, new BsonArray var filter = new BsonDocument("$expr", new BsonDocument(mongoDbType, new BsonArray
{ {
left, left,
@@ -23,18 +27,14 @@ namespace SqlSugar.MongoDb
private SqlFuncBinaryExpressionInfo GetSqlFuncBinaryExpressionInfo(bool leftIsMember, bool rightIsMember, BinaryExpression expr) private SqlFuncBinaryExpressionInfo GetSqlFuncBinaryExpressionInfo(bool leftIsMember, bool rightIsMember, BinaryExpression expr)
{ {
SqlFuncBinaryExpressionInfo sqlFuncBinaryExpressionInfo = new SqlFuncBinaryExpressionInfo(); SqlFuncBinaryExpressionInfo sqlFuncBinaryExpressionInfo = new SqlFuncBinaryExpressionInfo();
sqlFuncBinaryExpressionInfo.LeftMethodName= GetSystemDateMemberName(MongoDbExpTools.RemoveConvert(expr.Left)); var left = MongoDbExpTools.RemoveConvert(expr.Left);
if (!string.IsNullOrEmpty(sqlFuncBinaryExpressionInfo.LeftMethodName)) var right = MongoDbExpTools.RemoveConvert(expr.Right);
{ sqlFuncBinaryExpressionInfo.LeftMethodName= GetSystemDateMemberName(left);
sqlFuncBinaryExpressionInfo.LeftIsFunc = true; sqlFuncBinaryExpressionInfo.LeftIsFunc =!leftIsMember&& left is MethodCallExpression &&ExpressionTool.GetParameters(left).Count>0;
} sqlFuncBinaryExpressionInfo.RightMethodName = GetSystemDateMemberName(right);
sqlFuncBinaryExpressionInfo.RightMethodName = GetSystemDateMemberName(MongoDbExpTools.RemoveConvert(expr.Right)); sqlFuncBinaryExpressionInfo.RightIsFunc = !rightIsMember && right is MethodCallExpression && ExpressionTool.GetParameters(right).Count > 0;
if (!string.IsNullOrEmpty(sqlFuncBinaryExpressionInfo.RightMethodName)) sqlFuncBinaryExpressionInfo.LeftExp = MongoDbExpTools.RemoveConvert(left);
{ sqlFuncBinaryExpressionInfo.RightExp = MongoDbExpTools.RemoveConvert(right);
sqlFuncBinaryExpressionInfo.RightIsFunc = true;
}
sqlFuncBinaryExpressionInfo.LeftExp = MongoDbExpTools.RemoveConvert(expr.Left);
sqlFuncBinaryExpressionInfo.RightExp = MongoDbExpTools.RemoveConvert(expr.Right);
sqlFuncBinaryExpressionInfo.NodeType= expr.NodeType; sqlFuncBinaryExpressionInfo.NodeType= expr.NodeType;
return sqlFuncBinaryExpressionInfo; return sqlFuncBinaryExpressionInfo;
} }

View File

@@ -635,12 +635,7 @@ namespace SqlSugar.MongoDb
#region Helper #region Helper
private static BsonValue GetMemberName(BsonValue memberName) private static BsonValue GetMemberName(BsonValue memberName)
{ {
if (memberName is BsonDocument) return UtilMethods.GetMemberName(memberName);
return memberName;
if (memberName is BsonArray)
return memberName;
else
return $"${memberName}";
} }
/// <summary> /// <summary>

View File

@@ -1,4 +1,5 @@
using Dm.util; using Dm.util;
using Microsoft.IdentityModel.Tokens;
using MongoDB.Bson; using MongoDB.Bson;
using MongoDB.Bson.Serialization; using MongoDB.Bson.Serialization;
using System; using System;
@@ -582,6 +583,22 @@ namespace SqlSugar.MongoDb
{ {
return col.DbColumnName == "_id" || col.DataType == nameof(ObjectId); return col.DbColumnName == "_id" || col.DataType == nameof(ObjectId);
} }
internal static bool IsMongoVariable(BsonValue memberName)
{
return memberName is BsonString s && s.Value?.StartsWith("$")==true;
}
internal static BsonValue GetMemberName(BsonValue memberName)
{
if (memberName is BsonDocument)
return memberName;
if (memberName is BsonArray)
return memberName;
else if (UtilMethods.IsMongoVariable(memberName))
return memberName;
else
return $"${memberName}";
}
//public static object ConvertDataByTypeName(string ctypename,string value) //public static object ConvertDataByTypeName(string ctypename,string value)
//{ //{
// var item = new ConditionalModel() { // var item = new ConditionalModel() {