{"id":393,"title":"php7 mongodb distinct\u53cacount\u65b9\u6cd5","good":7,"bad":27,"hit":4289,"created_at":"2018-08-17 15:55:15","content":"
<?php\n\nfinal class MongoDB\n{\n    private static $ins = [];\n\n    private static $def = "default";\n\n    private $_conn = null;\n\n    private static $_config = [\n        "default" => ["url" => "mongodb:\/\/192.168.1.233:27017", "dbName" => "test"],\n        "localhost" => ["url" => "mongodb:\/\/localhost:27017", "dbName" => "test"],\n        "db1" => ["url" => "mongodb:\/\/username:password@localhost:27017", "dbName" => "myDb1"],\n    ];\n\n    private $_db = null;\n\n\n    \/**\n     * \u521b\u5efa\u5b9e\u4f8b\n     * @param  string $confKey\n     * @return \\MongoDB\n     *\/\n    static function getInstance($confKey = NULL)\n    {\n        if (!$confKey) {\n            $confKey = self::$def;\n        }\n        if (!isset(self::$ins[$confKey]) && ($conf = self::$_config[$confKey])) {\n            $m = new MongoDB($conf);\n            self::$ins[$confKey] = $m;\n        }\n        return self::$ins[$confKey];\n    }\n\n\n    \/**\n     * \u6784\u9020\u65b9\u6cd5-\u5355\u4f8b\u6a21\u5f0f\n     * MongoDB constructor.\n     * @param array $conf\n     *\/\n    private function __construct(array $conf)\n    {\n        $this->_conn = new \\MongoDB\\Driver\\Manager($conf["url"] . "\/{$conf["dbName"]}");\n        $this->_db = $conf["dbName"];\n    }\n\n\n    \/**\n     * \u63d2\u5165\u6570\u636e\n     * @param  string $collName\n     * @param  array $documents [["name"=>"values", ...], ...]\n     * @param  array $writeOps ["ordered"=>boolean,"writeConcern"=>array]\n     * @return \\MongoDB\\Driver\\Cursor\n     *\/\n    function insert($collName, array $documents, array $writeOps = [])\n    {\n        $cmd = [\n            "insert" => $collName,\n            "documents" => $documents,\n        ];\n        $cmd += $writeOps;\n        return $this->command($cmd);\n    }\n\n\n    \/**\n     * \u5220\u9664\u6570\u636e\n     * @param  string $collName\n     * @param  array $deletes [["q"=>query,"limit"=>int], ...]\n     * @param  array $writeOps ["ordered"=>boolean,"writeConcern"=>array]\n     * @return \\MongoDB\\Driver\\Cursor\n     *\/\n    function del($collName, array $deletes, array $writeOps = [])\n    {\n        foreach ($deletes as &$_) {\n            if (isset($_["q"]) && !$_["q"]) {\n                $_["q"] = (Object)[];\n            }\n            if (isset($_["limit"]) && !$_["limit"]) {\n                $_["limit"] = 0;\n            }\n        }\n        $cmd = [\n            "delete" => $collName,\n            "deletes" => $deletes,\n        ];\n        $cmd += $writeOps;\n        return $this->command($cmd);\n    }\n\n\n    \/**\n     * \u66f4\u65b0\u6570\u636e\n     * @param  string $collName\n     * @param  array $updates [["q"=>query,"u"=>update,"upSet"=>boolean,"multi"=>boolean], ...]\n     * @param  array $writeOps ["ordered"=>boolean,"writeConcern"=>array]\n     * @return \\MongoDB\\Driver\\Cursor\n     *\/\n    function update($collName, array $updates, array $writeOps = [])\n    {\n        $cmd = [\n            "update" => $collName,\n            "updates" => $updates,\n        ];\n        $cmd += $writeOps;\n        return $this->command($cmd);\n    }\n\n    \/**\n     * \u67e5\u8be2\n     * @param  string $collName\n     * @param  array $filter [query]\n     * @param  array $writeOps\n     * @return \\MongoDB\\Driver\\Cursor\n     *\/\n    function query($collName, array $filter, array $writeOps = [])\n    {\n        $cmd = [\n            "find" => $collName,\n            "filter" => $filter\n        ];\n        $cmd += $writeOps;\n        return $this->command($cmd);\n    }\n\n    \/**\n     * \u6267\u884cMongoDB\u547d\u4ee4\n     * @param array $param\n     * @return \\MongoDB\\Driver\\Cursor\n     *\/\n    function command(array $param)\n    {\n        $cmd = new \\MongoDB\\Driver\\Command($param);\n        \/\/ print_r($cmd);exit();\n        return $this->_conn->executeCommand($this->_db, $cmd);\n    }\n\n    \/**\n     * \u83b7\u53d6\u5f53\u524dmongoDB Manager\n     * @return \\MongoDB\\Driver\\Manager\n     *\/\n    function getMongoManager()\n    {\n        return $this->_conn;\n    }\n\n    \/**\n     * \u805a\u5408\u67e5\u8be2\n     * @param $collName\n     * @param array $where\n     * @param array $group\n     * @return \\MongoDB\\Driver\\Cursor\n     *\/\n    function aggregate($collName, array $where, array $group)\n    {\n        $cmd = [\n            'aggregate' => $collName,\n            'pipeline' => [\n                ['$match' => $where],\n                ['$group' => $group]\n            ]\n        ];\n        \/\/print_r($cmd);exit();\n        $result = $this->command($cmd)->toArray();\n        \/\/ print_r($result);exit();\n        return $result[0]->result;\n    }\n\n    \/**\n     * \u540cmysql\u4e2d\u7684distinct\u529f\u80fd\n     *\n     * @param string $collName collection\u540d\n     * @param string $key \u8981\u8fdb\u884cdistinct\u7684\u5b57\u6bb5\u540d\n     * @param array $where \u6761\u4ef6\n     * @return array\n     * Array\n     * (\n     * [0] => 1.0\n     * [1] => 1.1\n     * )\n     *\/\n    function distinct($collName, $key, array $where)\n    {\n        $result = [];\n        $cmd = [\n            'distinct' => $collName,\n            'key' => $key,\n            'query' => $where\n        ];\n        $arr = $this->command($cmd)->toArray();\n        if (!empty($arr)) {\n            $result = $arr[0]->values;\n        }\n        return $result;\n    }\n\n    \/**\n     * \u6309\u6761\u4ef6\u8ba1\u7b97\u4e2a\u6570\n     *\n     * @param string $collName \u96c6\u5408\u540d\n     * @param array $where \u6761\u4ef6\n     * @return int\n     *\/\n    function count($collName, array $where)\n    {\n        $result = 0;\n        $cmd = [\n            'count' => $collName,\n            'query' => $where\n        ];\n        $arr = $this->command($cmd)->toArray();\n        if (!empty($arr)) {\n            $result = $arr[0]->n;\n        }\n        return $result;\n    }\n\n\n}<\/pre>

<\/p>"}