Update mongodb

This commit is contained in:
sunkaixuan
2025-05-11 15:18:48 +08:00
parent 92b64b6260
commit b0f582a97c
2 changed files with 60 additions and 42 deletions

View File

@@ -8,65 +8,74 @@ using System.Text;
namespace SqlSugar.MongoDb
{
public partial class BinaryExpressionTranslator
{
{
private BsonDocument GetComparisonOperation(BinaryExpression expr, BsonValue field, BsonValue value, bool leftIsMember, bool rightIsMember, string op)
{
string leftValue = "";
BsonValue rightValue = "";
if (IsLeftValue(leftIsMember, rightIsMember, op) || IsRightValue(leftIsMember, rightIsMember, op))
var isLeftValue = IsLeftValue(leftIsMember, rightIsMember, op);
var isRightValue = IsRightValue(leftIsMember, rightIsMember, op);
var isKeyValue = isLeftValue || isRightValue;
if (isKeyValue)
return ComparisonKeyValue(expr, field, value, op, isLeftValue);
else
return ComparisonNotKeyValue(field, value, op);
}
private static BsonDocument ComparisonNotKeyValue(BsonValue field, BsonValue value, string op)
{
var leftKey = field.ToString();
return new BsonDocument
{
{ leftKey, new BsonDocument { { op, value } } }
};
}
private BsonDocument ComparisonKeyValue(BinaryExpression expr, BsonValue field, BsonValue value, string op, bool isLeftValue)
{
string leftValue = string.Empty;
BsonValue rightValue = null;
MemberExpression expression;
if (isLeftValue)
{
MemberExpression expression;
if (IsLeftValue(leftIsMember, rightIsMember, op))
leftValue = field.ToString();
rightValue = value;
expression = expr.Left as MemberExpression;
}
else
{
leftValue = value.ToString();
rightValue = field;
expression = expr.Right as MemberExpression;
}
if (expression != null)
{
if (expression.Expression is ParameterExpression parameter)
{
leftValue = field.ToString();
rightValue = value;
expression = expr.Left as MemberExpression;
}
else
{
leftValue = value.ToString();
rightValue = field;
expression = expr.Right as MemberExpression;
}
if (expression != null)
{
if (expression.Expression is ParameterExpression parameter)
if (_context?.context != null)
{
if (_context?.context != null)
var entityInfo = _context.context.EntityMaintenance.GetEntityInfo(parameter.Type);
var columnInfo = entityInfo.Columns.FirstOrDefault(s => s.PropertyName == leftValue || s.DbColumnName == leftValue);
if (columnInfo != null)
{
var entityInfo = _context.context.EntityMaintenance.GetEntityInfo(parameter.Type);
var columnInfo = entityInfo.Columns.FirstOrDefault(s => s.PropertyName == leftValue || s.DbColumnName == leftValue);
if (columnInfo != null)
leftValue = columnInfo.DbColumnName;
if (columnInfo.IsPrimarykey)
{
leftValue = columnInfo.DbColumnName;
if (columnInfo.IsPrimarykey)
{
rightValue = BsonValue.Create(ObjectId.Parse(value + ""));
}
rightValue = BsonValue.Create(ObjectId.Parse(value + ""));
}
}
}
}
if (op == "$eq")
{
return new BsonDocument { { leftValue, rightValue } };
}
else
{
return new BsonDocument
{
{ leftValue, new BsonDocument { { op, rightValue } } }
};
}
}
if (op == "$eq")
{
return new BsonDocument { { leftValue, rightValue } };
}
else
{
return new BsonDocument
{
{ field.ToString(), new BsonDocument { { op, value } } }
{ leftValue, new BsonDocument { { op, rightValue } } }
};
}
}
}
}

View File

@@ -472,7 +472,16 @@ namespace SqlSugar.MongoDb
}
return dic;
}
internal static BsonValue GetBsonValue(bool isMember, BsonValue field,bool isId)
{
if (!isMember && isId)
{
return ObjectId.Parse(field?.ToString());
}
if (isMember) return field.ToString();
else
return field;
}
internal static BsonValue GetBsonValue(bool isMember, BsonValue field)
{
if (isMember) return "$" + field;