From 964cf10189e5113140f96528b01ff3517ed7045e Mon Sep 17 00:00:00 2001
From: Danis Kirasirov <dbgbbu@gmail.com>
Date: Mon, 5 Feb 2024 16:37:56 +0300
Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/expr/expr_test.go  | 9 ---------
 pkg/expr/mongo.go      | 5 +----
 pkg/expr/mongo_test.go | 2 +-
 3 files changed, 2 insertions(+), 14 deletions(-)

diff --git a/pkg/expr/expr_test.go b/pkg/expr/expr_test.go
index 7ae9d7e8..35153da2 100644
--- a/pkg/expr/expr_test.go
+++ b/pkg/expr/expr_test.go
@@ -41,15 +41,6 @@ func TestIsExpression(t *testing.T) {
 		{"time", fmt.Sprintf("d > Time.Time('%s')", now.Format(time.RFC3339)), true},
 		{"in", "In(s, [1,2,3])", true},
 		{"in", "In(s, 1)", true},
-		{"exists#1", "exists(s)", true},
-		{"exists#2", "exists", false},
-		{"len#1", "len(s) == 1", true},
-		{"len#2", "len(s) != 1", true},
-		{"len#3", "len(s) > 1", true},
-		{"len#4", "len(s) >= 1", true},
-		{"len#5", "len(s) < 1", true},
-		{"len#6", "len(s) <= 1", true},
-		{"len#7", "len", false},
 		{"text search or id", "id", false},
 		{"numbers", "3", false},
 	}
diff --git a/pkg/expr/mongo.go b/pkg/expr/mongo.go
index a6a147d1..f856311d 100644
--- a/pkg/expr/mongo.go
+++ b/pkg/expr/mongo.go
@@ -414,10 +414,7 @@ func (c *compiler) CallNode(node *ast.CallNode) interface{} {
 			panic("exists() expects exactly 1 argument")
 		}
 		field := c.identifier(node.Arguments[0])
-		return bson.M{"$or": bson.A{
-			bson.M{field: bson.M{"$exists": true, "$type": "array"}},
-			bson.M{field: bson.M{"$ne": nil}},
-		}}
+		return bson.M{field: bson.M{"$exists": true}}
 
 	case "icontains":
 		v := c.identifier(node.Arguments[0])
diff --git a/pkg/expr/mongo_test.go b/pkg/expr/mongo_test.go
index fe9b9cdc..6420579c 100644
--- a/pkg/expr/mongo_test.go
+++ b/pkg/expr/mongo_test.go
@@ -30,7 +30,7 @@ func TestConvertToMongo(t *testing.T) {
 		{"equal", "s == 3", nil, bson.M{"s": 3}, false},
 		{"in array", "s in [1,2,3]", nil, bson.M{"s": bson.M{"$in": []interface{}{1, 2, 3}}}, false},
 		{"not in array", "s not in [1,2,3]", nil, bson.M{"s": bson.M{"$nin": []interface{}{1, 2, 3}}}, false},
-		{"exists#1", "exists(s)", nil, bson.M{"$or": bson.A{bson.M{"s": bson.M{"$exists": true, "$type": "array"}}, bson.M{"s": bson.M{"$ne": nil}}}}, false},
+		{"exists#1", "exists(s)", nil, bson.M{"s": bson.M{"$exists": true}}, false},
 		{"exists#2", "exists(s, s)", nil, nil, true},
 		{"len#1", "len(s)", nil, nil, true},
 		{"len#2", "len(s) <> 1", nil, nil, true},
-- 
GitLab