public function findAll($projections = [], $sorts = [], $options = [])
    {
        $options = $this->createOption($projections, $sorts, $options);

        $result = $this->collection->find([], $options);

        if (!isset($options['iterator']) || $options['iterator'] === false) {
            $objects = [];
            foreach ($result as $datas) {
                if (null != ($object = $this->createObject($datas, $options))) {
                    $objects[] = $object;
                }
            }
            return $objects;
        } else {
            $iteratorClass = $options['iterator'];
            $iterator = $iteratorClass === true ? new DocumentIterator($result, $this->modelName, $this) : new $iteratorClass($result, $this->modelName, $this);
            if (isset($options['readOnly']) && $options['readOnly'] == true) {
                $iterator->readOnly();
            }
            return $iterator;
        }
    }