PHPDaemon\Clients\Mongo\Pool::findOne PHP Method

findOne() public method

Finds one object in collection
public findOne ( array $p, callable $cb ) : void
$p array Hash of properties (offset, opts, where, col, fields, sort, hint, explain, snapshot, orderby, parse_oplog)
$cb callable Callback called when response received
return void
    public function findOne($p, $cb)
    {
        if (isset($p['cachekey'])) {
            $db = $this;
            $this->cache->get($p['cachekey'], function ($r) use($db, $p, $cb) {
                if ($r->result !== null) {
                    $cb(bson_decode($r->result));
                } else {
                    unset($p['cachekey']);
                    $db->findOne($p, $cb);
                }
            });
            return;
        }
        if (!isset($p['where'])) {
            $p['where'] = [];
        }
        $this->_params($p);
        $o = [];
        $s = false;
        foreach ($p as $k => $v) {
            if ($k === 'sort' || $k === 'hint' || $k === 'explain' || $k === 'snapshot') {
                if (!$s) {
                    $s = true;
                }
                if ($k === 'sort') {
                    $o['orderby'] = $v;
                } elseif ($k === 'parse_oplog') {
                } elseif ($k === 'rp') {
                    $o['$readPreference'] = $v;
                } else {
                    $o[$k] = $v;
                }
            }
        }
        if (empty($o['orderby'])) {
            unset($o['orderby']);
        }
        if ($s) {
            $o['query'] = $p['where'];
        } else {
            $o = $p['where'];
        }
        $cb = CallbackWrapper::wrap($cb);
        if ($this->safeMode) {
            static::safeModeEnc($o);
        }
        try {
            $this->request(self::OP_QUERY, pack('V', $p['opts']) . $p['col'] . "" . pack('VV', $p['offset'], -1) . bson_encode($o) . (isset($p['fields']) ? bson_encode($p['fields']) : ''), true, null, function ($conn, $reqId = null) use($p, $cb) {
                if (!$conn) {
                    !$cb || $cb(['$err' => 'Connection error.']);
                    return;
                }
                $conn->requests[$reqId] = [$p['col'], $cb, true];
            });
        } catch (\MongoException $e) {
            Daemon::log('MongoClient exception: ' . $e->getMessage() . ': ' . $e->getTraceAsString());
            if ($cb !== null) {
                $cb(['$err' => $e->getMessage(), '$query' => $o, '$fields' => isset($p['fields']) ? $p['fields'] : null]);
            }
        }
    }