Script House has published several similar articles before, you can refer to them.
Core code:
class NewMongodb { private $mongo; //NewMongodb连接 private $curr_db_name; private $curr_table_name; private $error; public $config; public function getInstance($mongo_server, $flag=array()) { static $NewMongodb_arr; if (empty($flag['tag'])) { $flag['tag'] = 'default'; } if (isset($flag['force']) && $flag['force'] == true) { $mongo = new NewMongodb($mongo_server); if (empty($NewMongodb_arr[$flag['tag']])) { $NewMongodb_arr[$flag['tag']] = $mongo; } return $mongo; } else if (isset($NewMongodb_arr[$flag['tag']]) && is_resource($NewMongodb_arr[$flag['tag']])) { return $NewMongodb_arr[$flag['tag']]; } else { $mongo = new NewMongodb($mongo_server); $NewMongodb_arr[$flag['tag']] = $mongo; return $mongo; } } /** * 构造函数 * 支持传入多个mongo_server(1.一个出问题时连接其它的server 2.自动将查询均匀分发到不同server) * * 参数: * $mongo_server:数组或字符串-array("127.0.0.1:1111", "127.0.0.1:2222")-"127.0.0.1:1111" * $connect:初始化mongo对象时是否连接,默认连接 * $auto_balance:是否自动做负载均衡,默认是 * * 返回值: * 成功:mongo object * 失败:false */ public function __construct($mongo_server, $connect=true, $auto_balance=true) { if (is_array($mongo_server)) { $mongo_server_num = count($mongo_server); if ($mongo_server_num > 1 && $auto_balance) { $prior_server_num = rand(1, $mongo_server_num); $rand_keys = array_rand($mongo_server,$mongo_server_num); $mongo_server_str = $mongo_server[$prior_server_num-1]; foreach ($rand_keys as $key) { if ($key != $prior_server_num - 1) { $mongo_server_str .= ',' . $mongo_server[$key]; } } } else { $mongo_server_str = implode(',', $mongo_server); } } else { $mongo_server_str = $mongo_server; } try { $this->mongo = new MongoClient($mongo_server, array('connect'=>$connect)); } catch (MongoConnectionException $e) { $this->error = $e->getMessage(); return false; } } /** * 连接NewMongodb server * * 参数:无 * * 返回值: * 成功:true * 失败:false */ public function connect() { try { $this->mongo->connect(); return true; } catch (MongoConnectionException $e) { $this->error = $e->getMessage(); return false; } } /** * select db * * 参数:$dbname * * 返回值:无 */ public function selectDb($dbname) { $this->curr_db_name = $dbname; } /** * 创建索引:如索引已存在,则返回。 * * 参数: * $table_name:表名 * $index:索引-array("id"=>1)-在id字段建立升序索引 * $index_param:其它条件-是否唯一索引等 * * 返回值: * 成功:true * 失败:false */ public function ensureIndex($table_name, $index, $index_param=array()) { $dbname = $this->curr_db_name; $index_param['safe'] = 1; try { $this->mongo->$dbname->$table_name->ensureIndex($index, $index_param); return true; } catch (MongoCursorException $e) { $this->error = $e->getMessage(); return false; } } /** * 插入记录 * * 参数: * $table_name:表名 * $record:记录 * * 返回值: * 成功:true * 失败:false */ public function insert($table_name, $record) { $dbname = $this->curr_db_name; try { $this->mongo->$dbname->$table_name->insert($record, array('safe'=>true)); return true; } catch (MongoCursorException $e) { $this->error = $e->getMessage(); return false; } } /** * 查询表的记录数 * * 参数: * $table_name:表名 * * 返回值:表的记录数 */ public function count($table_name) { $dbname = $this->curr_db_name; return $this->mongo->$dbname->$table_name->count(); } /** * 更新记录 * * 参数: * $table_name:表名 * $condition:更新条件 * $newdata:新的数据记录 * $options:更新选择-upsert/multiple * * 返回值: * 成功:true * 失败:false */ public function update($table_name, $condition, $newdata, $options=array()) { $dbname = $this->curr_db_name; $options['safe'] = 1; if (!isset($options['multiple'])) { $options['multiple'] = 0; } try { $this->mongo->$dbname->$table_name->update($condition, $newdata, $options); return true; } catch (MongoCursorException $e) { $this->error = $e->getMessage(); return false; } } /** * 删除记录 * * 参数: * $table_name:表名 * $condition:删除条件 * $options:删除选择-justOne * * 返回值: * 成功:true * 失败:false */ public function remove($table_name, $condition, $options=array()) { $dbname = $this->curr_db_name; $options['safe'] = 1; try { $this->mongo->$dbname->$table_name->remove($condition, $options); return true; } catch (MongoCursorException $e) { $this->error = $e->getMessage(); return false; } } /** * 查找记录 * * 参数: * $table_name:表名 * $query_condition:字段查找条件 * $result_condition:查询结果限制条件-limit/sort等 * $fields:获取字段 * * 返回值: * 成功:记录集 * 失败:false */ public function find($table_name, $query_condition, $result_condition=array(), $fields=array()) { $dbname = $this->curr_db_name; $cursor = $this->mongo->$dbname->$table_name->find($query_condition, $fields); if (!empty($result_condition['start'])) { $cursor->skip($result_condition['start']); } if (!empty($result_condition['limit'])) { $cursor->limit($result_condition['limit']); } if (!empty($result_condition['sort'])) { $cursor->sort($result_condition['sort']); } $result = array(); try { while ($cursor->hasNext()) { $result[] = $cursor->getNext(); } } catch (MongoConnectionException $e) { $this->error = $e->getMessage(); return false; } catch (MongoCursorTimeoutException $e) { $this->error = $e->getMessage(); return false; } return $result; } /** * 查找一条记录 * * 参数: * $table_name:表名 * $condition:查找条件 * $fields:获取字段 * * 返回值: * 成功:一条记录 * 失败:false */ public function findOne($table_name, $condition, $fields=array()) { $dbname = $this->curr_db_name; return $this->mongo->$dbname->$table_name->findOne($condition, $fields); } /** * 获取当前错误信息 * * 参数:无 * * 返回值:当前错误信息 */ public function getError() { return $this->error; } /*** NewMongodb类** examples: * $mongo = new NewMongodb("127.0.0.1:11223"); * $mongo->selectDb("test_db"); * 创建索引 * $mongo->ensureIndex("test_table", array("id"=>1), array('unique'=>true)); * 获取表的记录 * $mongo->count("test_table"); * 插入记录 * $mongo->insert("test_table", array("id"=>2, "title"=>"asdqw")); * 更新记录 * $mongo->update("test_table", array("id"=>1),array("id"=>1,"title"=>"bbb")); * 更新记录-存在时更新,不存在时添加-相当于set * $mongo->update("test_table", array("id"=>1),array("id"=>1,"title"=>"bbb"),array("upsert"=>1)); * 查找记录 * $mongo->find("c", array("title"=>"asdqw"), array("start"=>2,"limit"=>2,"sort"=>array("id"=>1))) * 查找一条记录 * $mongo->findOne("$mongo->findOne("ttt", array("id"=>1))", array("id"=>1)); * 删除记录 * $mongo->remove("ttt", array("title"=>"bbb")); * 仅删除一条记录 * $mongo->remove("ttt", array("title"=>"bbb"), array("justOne"=>1)); * 获取Mongo操作的错误信息 * $mongo->getError(); */ }
For more php mongodb operation classes with a few simple examples, please pay attention to the PHP Chinese website for related articles!

DependencyInjection(DI)inPHPenhancescodeflexibilityandtestabilitybydecouplingdependencycreationfromusage.ToimplementDIeffectively:1)UseDIcontainersjudiciouslytoavoidover-engineering.2)Avoidconstructoroverloadbylimitingdependenciestothreeorfour.3)Adhe

ToimproveyourPHPwebsite'sperformance,usethesestrategies:1)ImplementopcodecachingwithOPcachetospeedupscriptinterpretation.2)Optimizedatabasequeriesbyselectingonlynecessaryfields.3)UsecachingsystemslikeRedisorMemcachedtoreducedatabaseload.4)Applyasynch

Yes,itispossibletosendmassemailswithPHP.1)UselibrarieslikePHPMailerorSwiftMailerforefficientemailsending.2)Implementdelaysbetweenemailstoavoidspamflags.3)Personalizeemailsusingdynamiccontenttoimproveengagement.4)UsequeuesystemslikeRabbitMQorRedisforb

DependencyInjection(DI)inPHPisadesignpatternthatachievesInversionofControl(IoC)byallowingdependenciestobeinjectedintoclasses,enhancingmodularity,testability,andflexibility.DIdecouplesclassesfromspecificimplementations,makingcodemoremanageableandadapt

The best ways to send emails using PHP include: 1. Use PHP's mail() function to basic sending; 2. Use PHPMailer library to send more complex HTML mail; 3. Use transactional mail services such as SendGrid to improve reliability and analysis capabilities. With these methods, you can ensure that emails not only reach the inbox, but also attract recipients.

Calculating the total number of elements in a PHP multidimensional array can be done using recursive or iterative methods. 1. The recursive method counts by traversing the array and recursively processing nested arrays. 2. The iterative method uses the stack to simulate recursion to avoid depth problems. 3. The array_walk_recursive function can also be implemented, but it requires manual counting.

In PHP, the characteristic of a do-while loop is to ensure that the loop body is executed at least once, and then decide whether to continue the loop based on the conditions. 1) It executes the loop body before conditional checking, suitable for scenarios where operations need to be performed at least once, such as user input verification and menu systems. 2) However, the syntax of the do-while loop can cause confusion among newbies and may add unnecessary performance overhead.

Efficient hashing strings in PHP can use the following methods: 1. Use the md5 function for fast hashing, but is not suitable for password storage. 2. Use the sha256 function to improve security. 3. Use the password_hash function to process passwords to provide the highest security and convenience.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Safe Exam Browser
Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SublimeText3 English version
Recommended: Win version, supports code prompts!

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

Dreamweaver CS6
Visual web development tools
