             return [key: RegularExpression(pattern: val + "$", options: .anchorsMatchLines)]
         case .nothing:
             return []
+        case .in(let key, let array):
+            return [key: ["$in": Document(array: array)] as Document]
         case .near(let key, let point, let maxDistance, let minDistance):
             return GeometryOperator(key: key, operatorName: "$near", geometry: point, maxDistance: maxDistance, minDistance: minDistance).makeDocument()
         case .geoWithin(let key, let polygon):

    
    /// Value at this key exists, even if it is `Null`
    case exists(key: String, exists: Bool)

    /// Match all documents containing a `key` with geospatial data that is near the specified GeoJSON `Point`.
    ///

    }
    
    return lhs
}

extension String {
    /// MongoDB `$in` operator
    public func `in`(_ elements: [Primitive]) -> Query {
        return Query(aqt: .in(key: self, in: elements))
    }
    
    /// MongoDB `$in` operator
    public func `in`(_ elements: Primitive...) -> Query {
        return self.in(elements)
    }
}

/// Abstract Query Tree.
