diff --git a/pkg/expr/mongo.go b/pkg/expr/mongo.go
index 77e26b12244695addd23b4d144b79d0e23ad5849..a330e65a1baf8310cc4ac413da2ed3362273babb 100644
--- a/pkg/expr/mongo.go
+++ b/pkg/expr/mongo.go
@@ -107,6 +107,8 @@ func (c *compiler) compile(node ast.Node) interface{} {
 		return c.UnaryNode(n)
 	case *ast.BinaryNode:
 		return c.BinaryNode(n)
+	case *ast.ChainNode:
+		return c.ChainNode(n)
 	case *ast.SliceNode:
 		return c.SliceNode(n)
 	case *ast.CallNode:
@@ -119,6 +121,8 @@ func (c *compiler) compile(node ast.Node) interface{} {
 		return c.PointerNode(n)
 	case *ast.ConditionalNode:
 		return c.ConditionalNode(n)
+	case *ast.VariableDeclaratorNode:
+		return c.VariableDeclaratorNode(n)
 	case *ast.ArrayNode:
 		return c.ArrayNode(n)
 	case *ast.MapNode:
@@ -316,6 +320,10 @@ func (c *compiler) BinaryNode(node *ast.BinaryNode) interface{} {
 	}
 }
 
+func (c *compiler) ChainNode(node *ast.ChainNode) string {
+	panic(fmt.Sprintf("unsupported chain node"))
+}
+
 func (c *compiler) MemberNode(node *ast.MemberNode) string {
 	v := c.compile(node.Node)
 	if val, ok := v.(string); ok {
@@ -600,6 +608,10 @@ func (c *compiler) ConditionalNode(node *ast.ConditionalNode) interface{} {
 	//c.patchJump(end)
 }
 
+func (c *compiler) VariableDeclaratorNode(node *ast.VariableDeclaratorNode) int {
+	panic("unsupported variable declarator node ")
+}
+
 func (c *compiler) ArrayNode(node *ast.ArrayNode) interface{} {
 	panic("unsupported array node")
 	//for _, node := range node.Nodes {