mirror of
https://gitee.com/dotnetchina/SqlSugar.git
synced 2025-07-16 16:50:41 +08:00
Update mongodb
This commit is contained in:
parent
808afe07fe
commit
6833b51ea5
@ -13,6 +13,7 @@ namespace MongoDbTest
|
||||
public static void Init()
|
||||
{
|
||||
var db = DbHelper.GetNewDb();
|
||||
db.DbMaintenance.TruncateTable<OrderInfo>();
|
||||
db.Insertable(new OrderInfo() { CreateTime = DateTime.Now, Name = "a", Price = 1 })
|
||||
.ExecuteCommand();
|
||||
var ids = db.Insertable(new List<OrderInfo>(){
|
||||
|
@ -69,25 +69,6 @@ namespace SqlSugar.MongoDb
|
||||
return ExtractFieldPath(expr);
|
||||
}
|
||||
|
||||
private static bool IsDateProperty(Expression expr)
|
||||
{
|
||||
return !string.IsNullOrEmpty(BinaryExpressionTranslator.GetSystemDateMemberName(expr));
|
||||
}
|
||||
|
||||
private static bool IsLength(MemberExpression oldMember)
|
||||
{
|
||||
if (oldMember.Member.Name != "Length")
|
||||
return false;
|
||||
|
||||
var expressionType = oldMember.Expression?.Type;
|
||||
if (expressionType == null)
|
||||
return false;
|
||||
|
||||
return expressionType.IsArray
|
||||
|| expressionType == typeof(string)
|
||||
|| expressionType.FullName == "System.Span`1"
|
||||
|| expressionType.FullName == "System.ReadOnlySpan`1";
|
||||
}
|
||||
|
||||
private BsonValue ExtractFieldPath(Expression expr)
|
||||
{
|
||||
@ -103,8 +84,43 @@ namespace SqlSugar.MongoDb
|
||||
{
|
||||
_visitorContext.ExpType = typeof(MemberExpression);
|
||||
}
|
||||
string resultString = GenerateFieldPath(expr, parts);
|
||||
var isJoin = this._context?.queryBuilder?.IsSingle() == false;
|
||||
var shortName = ((ParameterExpression)expr)?.Name;
|
||||
var joinInfo = this._context?.queryBuilder?.JoinQueryInfos?.FirstOrDefault(it => it.ShortName.EqualCase(shortName));
|
||||
bool isObj = ProcessJoinFieldPath(ref resultString, ref shortName, joinInfo);
|
||||
if (isObj)
|
||||
return BsonDocument.Parse(resultString);
|
||||
else
|
||||
return UtilMethods.MyCreate(resultString);
|
||||
}
|
||||
|
||||
private bool ProcessJoinFieldPath(ref string resultString, ref string shortName, JoinQueryInfo joinInfo)
|
||||
{
|
||||
var isObj = false;
|
||||
if (joinInfo != null)
|
||||
{
|
||||
shortName = $"{joinInfo.ShortName}.";
|
||||
if (this._context.resolveType.IsIn(ResolveExpressType.SelectSingle, ResolveExpressType.SelectMultiple))
|
||||
{
|
||||
// 构造 $ifNull 表达式
|
||||
var columnString = $"{{ \"$ifNull\": [\"${joinInfo.ShortName}.{resultString}\", null] }}";
|
||||
resultString = columnString;
|
||||
isObj = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
resultString = $"{joinInfo.ShortName}.{resultString}";
|
||||
}
|
||||
}
|
||||
resultString = TransformFieldPath(resultString, shortName);
|
||||
return isObj;
|
||||
}
|
||||
|
||||
private string GenerateFieldPath(Expression expr, Stack<string> parts)
|
||||
{
|
||||
string resultString = null;
|
||||
if (parts.Count == 1 && expr is ParameterExpression parameter&& _context?.context != null)
|
||||
if (parts.Count == 1 && expr is ParameterExpression parameter && _context?.context != null)
|
||||
{
|
||||
var entityInfo = _context.context.EntityMaintenance.GetEntityInfo(parameter.Type);
|
||||
var columnInfo = entityInfo.Columns.FirstOrDefault(s => s.PropertyName == parts.First());
|
||||
@ -121,26 +137,31 @@ namespace SqlSugar.MongoDb
|
||||
{
|
||||
resultString = string.Join(".", parts);
|
||||
}
|
||||
var isJoin = this._context?.queryBuilder?.IsSingle()==false;
|
||||
var shortName = ((ParameterExpression)expr)?.Name;
|
||||
var joinInfo = this._context?.queryBuilder?.JoinQueryInfos?.FirstOrDefault(it => it.ShortName.EqualCase(shortName));
|
||||
var isObj = false;
|
||||
if (joinInfo != null)
|
||||
{
|
||||
shortName = $"{joinInfo.ShortName}.";
|
||||
if (this._context.resolveType.IsIn(ResolveExpressType.SelectSingle,ResolveExpressType.SelectMultiple))
|
||||
{
|
||||
// 构造 $ifNull 表达式
|
||||
var columnString = $"{{ \"$ifNull\": [\"${joinInfo.ShortName}.{resultString}\", null] }}";
|
||||
resultString = columnString;
|
||||
isObj = true;
|
||||
|
||||
return resultString;
|
||||
}
|
||||
else
|
||||
|
||||
private static bool IsDateProperty(Expression expr)
|
||||
{
|
||||
resultString = $"{joinInfo.ShortName}.{resultString}";
|
||||
return !string.IsNullOrEmpty(BinaryExpressionTranslator.GetSystemDateMemberName(expr));
|
||||
}
|
||||
private static bool IsLength(MemberExpression oldMember)
|
||||
{
|
||||
if (oldMember.Member.Name != "Length")
|
||||
return false;
|
||||
|
||||
var expressionType = oldMember.Expression?.Type;
|
||||
if (expressionType == null)
|
||||
return false;
|
||||
|
||||
return expressionType.IsArray
|
||||
|| expressionType == typeof(string)
|
||||
|| expressionType.FullName == "System.Span`1"
|
||||
|| expressionType.FullName == "System.ReadOnlySpan`1";
|
||||
}
|
||||
if (this._context!=null&&this._context.resolveType.IsIn(ResolveExpressType.WhereMultiple, ResolveExpressType.WhereSingle) &&this._context?.queryBuilder is MongoDbQueryBuilder mb&&mb.EasyJoin==false)
|
||||
private string TransformFieldPath(string resultString, string shortName)
|
||||
{
|
||||
if (this._context?.queryBuilder is MongoDbQueryBuilder mb && mb.EasyJoin == false)
|
||||
{
|
||||
if (mb.FirstParameter == shortName.TrimEnd('.'))
|
||||
{
|
||||
@ -156,10 +177,8 @@ namespace SqlSugar.MongoDb
|
||||
resultString = $"${resultString.TrimStart(replaceName.toCharArray())}";
|
||||
}
|
||||
}
|
||||
if (isObj)
|
||||
return BsonDocument.Parse(resultString);
|
||||
else
|
||||
return UtilMethods.MyCreate(resultString);
|
||||
|
||||
return resultString;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -39,9 +39,10 @@ namespace SqlSugar.MongoDb
|
||||
};
|
||||
newJoins.add(result);
|
||||
queryBuilder.JoinQueryInfos = newJoins;
|
||||
|
||||
MongoDbQueryBuilder mb2 = null;
|
||||
if (queryBuilder is MongoDbQueryBuilder mb)
|
||||
{
|
||||
mb2 = mb;
|
||||
var exp = joinExpression as LambdaExpression;
|
||||
mb.EasyJoin = exp.Body is BinaryExpression b && b.Left is MemberExpression l && b.Right is MemberExpression r && l.Expression is ParameterExpression && r.Expression is ParameterExpression;
|
||||
if (mb.EasyJoin==false)
|
||||
@ -61,15 +62,19 @@ namespace SqlSugar.MongoDb
|
||||
{
|
||||
result.ShortName = queryBuilder.Builder.GetTranslationColumnName(result.ShortName);
|
||||
}
|
||||
if (queryBuilder is MongoDbQueryBuilder mb2&&mb2.EasyJoin==false)
|
||||
if (mb2!=null)
|
||||
{
|
||||
var lets=mb2.lets;
|
||||
if (mb2.JoinQueryInfoLets == null)
|
||||
{
|
||||
mb2.JoinQueryInfoLets = new Dictionary<string, Dictionary<string, string>>();
|
||||
}
|
||||
if (mb2.EasyJoin==false)
|
||||
{
|
||||
mb2.JoinQueryInfoLets.Add(result.ShortName, mb2.lets);
|
||||
}
|
||||
mb2.EasyJoin = null;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user