diff --git a/pkg/expr/mongo.go b/pkg/expr/mongo.go
index 08a33e0fc999ecd5c7aba566097d33c57b53e2b0..9a8a7cd22402addc9973421935c9f61b3dbdf288 100644
--- a/pkg/expr/mongo.go
+++ b/pkg/expr/mongo.go
@@ -209,11 +209,11 @@ func (c *compiler) UnaryNode(node *ast.UnaryNode) interface{} {
 	switch node.Operator {
 	case "!", "not":
 		nodeIn, ok := node.Node.(*ast.BinaryNode)
-		if !ok || nodeIn.Operator != "in" {
-			return bson.M{"$not": c.compile(node.Node)}
+		if ok && nodeIn.Operator == "in" {
+			return bson.M{c.identifier(nodeIn.Left): bson.M{"$nin": c.eval(nodeIn.Right)}}
 		}
-		
-		return bson.M{c.identifier(nodeIn.Left): bson.M{"$nin": c.eval(nodeIn.Right)}}
+
+		return bson.M{"$not": c.compile(node.Node)}		
 	default:
 		panic(fmt.Sprintf("unknown operator (%v)", node.Operator))
 	}