OR
This commit is contained in:
35
dbs/dbs.go
35
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 = ""
|
||||
|
||||
Reference in New Issue
Block a user