{"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>"}