This commit is contained in:
mr
2026-03-04 15:57:47 +01:00
parent 340f2a6301
commit e03a0d3dd0

View File

@@ -48,30 +48,30 @@ func (m Operator) ToMongoOperator(k string, value interface{}) bson.M {
fmt.Println("Recovered. Error:\n", r, debug.Stack()) fmt.Println("Recovered. Error:\n", r, debug.Stack())
} }
}() }()
defaultValue := bson.M{k: bson.M{"$regex": m.ToValueOperator(StringToOperator(m.String()), value)}} defaultValue := bson.M{k: bson.M{"$regex": m.ToValueOperator(StringToOperator(m.String()), value, false)}}
switch m { switch m {
case LIKE: case LIKE:
return bson.M{k: bson.M{"$regex": m.ToValueOperator(StringToOperator(m.String()), value)}} return bson.M{k: bson.M{"$regex": m.ToValueOperator(StringToOperator(m.String()), value, false)}}
case EXISTS: case EXISTS:
return bson.M{k: bson.M{"$exists": m.ToValueOperator(StringToOperator(m.String()), value)}} return bson.M{k: bson.M{"$exists": m.ToValueOperator(StringToOperator(m.String()), value, false)}}
case IN: case IN:
return bson.M{k: bson.M{"$in": m.ToValueOperator(StringToOperator(m.String()), value)}} return bson.M{k: bson.M{"$in": m.ToValueOperator(StringToOperator(m.String()), value, false)}}
case GTE: case GTE:
return bson.M{k: bson.M{"$gte": m.ToValueOperator(StringToOperator(m.String()), value)}} return bson.M{k: bson.M{"$gte": m.ToValueOperator(StringToOperator(m.String()), value, false)}}
case GT: case GT:
return bson.M{k: bson.M{"$gt": m.ToValueOperator(StringToOperator(m.String()), value)}} return bson.M{k: bson.M{"$gt": m.ToValueOperator(StringToOperator(m.String()), value, false)}}
case LTE: case LTE:
return bson.M{k: bson.M{"$lte": m.ToValueOperator(StringToOperator(m.String()), value)}} return bson.M{k: bson.M{"$lte": m.ToValueOperator(StringToOperator(m.String()), value, false)}}
case LT: case LT:
return bson.M{k: bson.M{"$lt": m.ToValueOperator(StringToOperator(m.String()), value)}} return bson.M{k: bson.M{"$lt": m.ToValueOperator(StringToOperator(m.String()), value, false)}}
case ELEMMATCH: case ELEMMATCH:
return bson.M{k: bson.M{"$elemMatch": m.ToValueOperator(StringToOperator(m.String()), value)}} return bson.M{k: bson.M{"$elemMatch": m.ToValueOperator(StringToOperator(m.String()), value, false)}}
case EQUAL: case EQUAL:
return bson.M{k: value} return bson.M{k: value}
case NOT: case NOT:
return bson.M{"$not": m.ToValueOperator(StringToOperator(m.String()), value)} return bson.M{"$not": m.ToValueOperator(StringToOperator(m.String()), value, false)}
case OR: case OR:
return bson.M{"$or": m.ToValueOperator(StringToOperator(m.String()), value)} return bson.M{"$or": m.ToValueOperator(StringToOperator(m.String()), value, true)}
default: default:
return defaultValue return defaultValue
} }
@@ -113,10 +113,19 @@ func GetBson(filters *Filters) bson.D {
return f return f
} }
func (m Operator) ToValueOperator(operator Operator, value interface{}) interface{} { func (m Operator) ToValueOperator(operator Operator, value interface{}, or bool) interface{} {
switch value := value.(type) { switch value := value.(type) {
case *Filters: case *Filters:
return GetBson(value) bson := GetBson(value)
if or {
for _, b := range bson {
if b.Key == "$or" {
return b.Value
}
}
} else {
return bson
}
default: default:
if strings.TrimSpace(fmt.Sprintf("%v", value)) == "*" { if strings.TrimSpace(fmt.Sprintf("%v", value)) == "*" {
value = "" value = ""