diff --git a/pkg/expr/mongo.go b/pkg/expr/mongo.go index ed35a6dc3e2d287e70562db574eaadfbb65618d0..a6a147d19479b408bdb91fc0872f2fc85942b6d6 100644 --- a/pkg/expr/mongo.go +++ b/pkg/expr/mongo.go @@ -681,18 +681,18 @@ func (c *compiler) handleLenNode(node *ast.BinaryNode) bson.M { return bson.M{c.identifier(lenNode.Arguments[0]): bson.M{"$eq": bson.A{}}} case (op == "!=" || op == ">") && length == 0: return bson.M{c.identifier(lenNode.Arguments[0]): bson.M{"$exists": true, "$type": "array", "$ne": bson.A{}}} + case op == ">=" && length == 0: + return bson.M{c.identifier(lenNode.Arguments[0]): bson.M{"$exists": true, "$type": "array"}} + case op == "<" && length == 0: + panic("invalid comparison: len() cannot be less than 0") case op == "==": return bson.M{c.identifier(lenNode.Arguments[0]): bson.M{"$size": length}} case op == "!=": return bson.M{c.identifier(lenNode.Arguments[0]): bson.M{"$not": bson.M{"$size": length}}} case op == ">": return bson.M{c.identifier(lenNode.Arguments[0]) + "." + strconv.Itoa(length): bson.M{"$exists": true}} - case op == ">=" && length == 0: - return bson.M{c.identifier(lenNode.Arguments[0]): bson.M{"$exists": true, "$type": "array"}} case op == ">=": return bson.M{c.identifier(lenNode.Arguments[0]) + "." + strconv.Itoa(length-1): bson.M{"$exists": true}} - case op == "<" && length == 0: - panic("invalid comparison: len() cannot be less than 0") case op == "<": return bson.M{c.identifier(lenNode.Arguments[0]) + "." + strconv.Itoa(length-1): bson.M{"$exists": false}} case op == "<=":