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

    
    /// 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 [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):
