From 24a277333dee54f86d50813206203e242c610ce1 Mon Sep 17 00:00:00 2001 From: mr Date: Fri, 2 Aug 2024 15:36:52 +0200 Subject: [PATCH] mongo and or --- dbs/mongo/mongo.go | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/dbs/mongo/mongo.go b/dbs/mongo/mongo.go index e0dfefe..a2636ce 100644 --- a/dbs/mongo/mongo.go +++ b/dbs/mongo/mongo.go @@ -268,6 +268,7 @@ func (m *MongoDB) Search(filters *dbs.Filters, collection_name string) (*mongo.C opts.SetLimit(100) targetDBCollection := CollectionMap[collection_name] orList := bson.A{} + andList := bson.A{} f := bson.D{} if filters != nil { for k, filter := range filters.Or { @@ -275,14 +276,18 @@ func (m *MongoDB) Search(filters *dbs.Filters, collection_name string) (*mongo.C orList = append(orList, dbs.StringToOperator(ff.Operator).ToMongoOperator(k, ff.Value)) } } - if len(orList) > 0 { - f = bson.D{{"$or", orList}} - } for k, filter := range filters.And { for _, ff := range filter { - f = append(f, dbs.StringToOperator(ff.Operator).ToMongoEOperator(k, ff.Value)) + andList = append(andList, dbs.StringToOperator(ff.Operator).ToMongoOperator(k, ff.Value)) } } + if len(orList) > 0 && len(andList) == 0 { + f = bson.D{{"$or", orList}} + } else if len(orList) == 0 && len(andList) > 0 { + f = bson.D{{"$and", andList}} + } else if len(orList) > 0 && len(andList) > 0 { + f = bson.D{{"$and", andList}, {"$or", orList}} + } } MngoCtx, cancel = context.WithTimeout(context.Background(), 10*time.Second)