public function where($query = [], array $projection = [], bool $cacheable = false) : Cursor
{
$cursorClass = $cacheable ? CacheableCursor::class : Cursor::class;
$cursor = new $cursorClass($this->schema, $this->getCollection(), 'find', [$this->prepareValueQuery($query), ['projection' => $this->prepareProjection($projection)]]);
return $cursor;
}