php MongoDB driver 查询实例

       //是否只查mx
        $mx_on_switch = I("post.mx_on_switch");
        //mx模糊查询
        $mx_vague_check = I("post.mx_vague_check");
        //邮箱品牌
        $mail_brand = I("post.mail_brand");
        //智能客服品牌
        $contacttool_brand = I('post.contacttool_brand');
        //域名注册人
        $people = I("post.people");
        //注册机构
        $registrar = I("post.registrar");
        //是否只查标题
        $mx_switch_title = I("post.mx_switch_title");
        //网站标题
        $wwwtitle = I("post.wwwtitle");
        $province = I("post.province");

        $filter = [];
        if (!empty($mail_brand)) {
            $filter['mx.brand_id'] = intval($mail_brand);
        }
        if (!empty($contacttool_brand)) {
            $filter['contacttool.brand_id'] = intval($contacttool_brand);
        }
        if ($mx_switch_title == 20 || empty($province)) {
            $filter["wwwtitle"] = ['$ne' => 'null'];
        }
        //网站标题
        if (!empty($wwwtitle)) {
            $filter['wwwtitle'] = new \MongoDB\BSON\Regex(".*{$wwwtitle}.*", '');
        }
        //只带mx的查询
        if ($mx_on_switch == 20 || empty($province)) {
            $filter["mx"] = ['$exists' => true];
        }
        //mx模糊查询
        if (!empty($mx_vague_check)) {
            $filter["mx.mx"] = new \MongoDB\BSON\Regex(".*{$mx_vague_check}.*", '');
        }

        //如果没有传递省份
        if (empty($province)) {
            $province = "shandong";
        }
        try {
            $options_base = ['connectTimeoutMS' => 500000, 'socketTimeoutMS' => 500000];
            $manager = new \MongoDB\Driver\Manager(C('mongodb_auth_url'), $options_base);
            $coll = C('default_db') . '.' . $province;
            $options = [
                "skip" => $page,
                "limit" => $rows,
                'projection' => ['createdate' => 0,
                    'expiresdate' => 0,
                    'registrant_city' => 0,
                    'registrant_street' => 0,
                    'registrant_state' => 0,
                    'updatedate' => 0,
                    'whoisserver_id' => 0,
                    'registrar_name_id' => 0,
                    'id' => 0,
                ],
            ];
            //查询记录总的数量
            $commands = [
                'count' => $province,
                'query' => $filter
            ];
            $command = new \MongoDB\Driver\Command($commands);
            $cursor = $manager->executeCommand('mxmanage', $command);
            $info = $cursor->toArray();
            $count = $info[0]->n;
            $query = new \MongoDB\Driver\Query($filter, $options);
            $rows = $manager->executeQuery($coll, $query);
            $info = [];
            foreach ($rows as $document) {
                $doc = (array)$document;
                $doc['_id'] = (string)$doc['_id'];
                $doc['mail_brand_name'] = $doc['mx']->brand_name;
                $doc['mail_mx'] = $doc['mx']->mx ?: '';
                $doc['contacttool_brand_name'] = $doc['contacttool']->brand_name;
                $doc['mx_changetime'] = !$doc['mx_changetime'] ? '' : date('Y-m-d H:i', $doc['mx_changetime']);
                $doc['contacttool_changetime'] = !$doc['contacttool_changetime'] ? '' : date('Y-m-d H:i', $doc['contacttool_changetime']);
                unset($doc['mx']);
                unset($doc['contacttool']);
                $info[] = $doc;
            }
        } catch (\MongoDB\Driver\Exception $e) {
            echo $e->getMessage(), "\n";
            exit;
        }
        return json_encode(array("total" => $count, "rows" => $info));

查询实例  参考http://php.net/manual/en/book.mongodb.php

posted @ 2017-03-05 12:48  timelesszhuang  阅读(2322)  评论(1编辑  收藏  举报