diff --git a/dbs/dbs.go b/dbs/dbs.go index 6c9ba7d..fc6885d 100644 --- a/dbs/dbs.go +++ b/dbs/dbs.go @@ -48,30 +48,30 @@ func (m Operator) ToMongoOperator(k string, value interface{}) bson.M { 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 { 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: - 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: - 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: - 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: - 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: - 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: - 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: - 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: return bson.M{k: value} 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: - return bson.M{"$or": m.ToValueOperator(StringToOperator(m.String()), value)} + return bson.M{"$or": m.ToValueOperator(StringToOperator(m.String()), value, true)} default: return defaultValue } @@ -113,10 +113,19 @@ func GetBson(filters *Filters) bson.D { 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) { 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: if strings.TrimSpace(fmt.Sprintf("%v", value)) == "*" { value = ""