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)) }