• php连接MongoDB数据库,对数据库的增删改查


    一、连接数据库(在完成对MongoDB的扩展的前提下)

    连接本地的mongodb,端口默认27017,

    <?php
        
        //连接Mongodb
        $manager = new      MongoDBDriverManager("mongodb://127.0.0.1:27017");
        
        echo "connect success!!!";    
    ?>

    二、插入数据

    <?php
        
        //连接Mongodb
        $manager = new MongoDBDriverManager("mongodb://127.0.0.1:27017");
        
        echo "connect success!!!";
        
        //创建变量,进行插入操作
        $bulk = new MongoDBDriverBulkWrite;
        
        //插入的数据(插入一条或多条)
        $bulk->insert(["name"=>"zhangsan","age"=>25,"class"=>"jisuanjierban"]);
        $bulk->insert(["name"=>"lisi","age"=>25,"class"=>"jisuanjisiban"]);
        
        //插入数据到useinfo数据库下的student表
        $manager->executeBulkWrite("useinfo.student",$bulk);
        
        echo "insert success!!!";
    ?>

    三、查询数据

    <?php
     
        //连接Mongodb
        $manager = new MongoDBDriverManager("mongodb://127.0.0.1:27017");
        
        echo "connect success!!!".PHP_EOL;
        
        //过滤条件
        $filter  = ['age' => ['$gt' => 20]];
        
        //可选项
        $option = [
            
            'projection' => ["_id" =>0],  //不显示_id,此字段用于指定显示或不显示某些字段
            
            'sort' => ['name' => -1],     //按照某些字段排序 ,-1倒叙,1正序
            
            'limit'=>$pageSize,  //取多少条数据
            
            'skip' => ($num-1)*$pageSize  //取第几页数据
        ];
        
        //查询数据
        $query = new MongoDBDriverQuery($filter, $option);
        
        //查询结果,返回数组
        $cursor = $manager->executeQuery('useinfo.student',$query);
        
        //循环遍历
        foreach ($cursor as $document){
        
            print_r($document);
        }
        
        echo "over";
        
    ?>

    四、更新数据

    <?php 
        //连接Mongodb
        $manager = new MongoDBDriverManager("mongodb://127.0.0.1:27017");
        
        echo "connect success!!!"
        
        $bulk->new MongoDBDriverBulkWrite;
        $bulk->update(
            ["name" => "zhangsan"],
            ["$set" => ["name" => "kenan","class" => "softeneregy"]],
            ["multi" => false, "upsert" => false],  //multi为true,代表更新找到的所有记录,false默认更新找到的第一条
                                                    //upsert为true代表如果没有此条记录就执行插入操作,默认false不插入
        );
        
        $result = $manager->executeBulkWrite('test.sites', $bulk);
    ?>

    五、对以上方法进行简单的封装

    <?php 
        class MongoDBClient{
            
            protected $manager;  //连接数据库
            
            protected $dbname;   //操作的数据库
            
            protected $collection;  //操作的数据库下的表
            
            protected $bulk;        // 插入和更新操作
            
            protected $writeConcern;  //连接超时
            
            
            //定义构造函数
            public function __construct($config){
                $this->manager = new MongoDBDriverManager("mongodb://127.0.0.1:27017");  //连接数据库
                 
                $this->dbname = $config["dbname"];   //初始化数据库
                
                $this->collection = $config["collection"];  //初始化集合
                
                $this->bulk = $new MongoDBDriverBulkWrite;  //插入、更新操纵
            
                $this->writeConcern = new MongoDBDriverWriteConcern(MongoDBDriverWriteConcern::MAJORITY,100); //连接超时
    
            }
            
            //查询方法
            public function query($filter=[],$option=[]){
                //创建查询对象
                $query = new MongoDBDriverQuery($filter,$option)
                
                //查询结果,返回数组
                $cursor = $manager->executeQuery("$this->dbname.$this->collection",$uery);
                
                //循环遍历
                foreach($cursor as $document){
                
                    print_r($document);
                }
            
            }
            
            //插入数据
            public function insert($data=[]){
                
                //插入一条或多条数据 $bulk->insert(["name"=>"zhangsan","age"=>25,"class"=>"jisuanjierban"]);
                $this->bulk->insert($data);
                
                //插入数据到指定的数据库下的表
                $this->manager->executeQuery("$this->dbname.$this->collection",$this->bulk);
                
            
            }
            
            //更新数据
            public function update($filter=[],$update=[],$upsert=false){
                
                $this->bulk->update([
                    $filter,
                    ["$set" => $update],
                    ["multi" => true,"upsert"=>$upsert],
                ]);
                $result = $this->manager-executeBulkWrite("$this->dbname.$this->collection",$this-bulk);
                
                
            }
            
            //删除数据
            public function delete($filter=[],$limit=0){
            
                $this-bulk-delete(
                    $filter,
                    ['limit' => $limit]
                );
                $result = $this->manager->exeucuteBulkWrite("$this->dbname.$this-colletion",$this-bulk);
            
            }
            
            
        }
        
        //获取要操作的数据库
        $dbname = $_GET['dbname'];
        
        //要操作的表(集合)
        $collection = $_GET['colection'];
        
        //创建当前类的对象
        $obj1 = new MongoDBClient(["dbname"=>$dbname,"collection"=>$collection]);
        
        //从表单获取当前操作类型(增、删、改、查)
        $action = $_GET['action'];
        
        //插入数据
        if($action == "insert"){
            $data = $_GET["data"];
            $obj1->insert($data);
            
        //查询数据
        }else if($action == "query"){
            $filter = $_GET["filter"];
            $option = $_GET["option"];
            $obj->query($filter,$option);
        }
        
        //更新数据
        else if($action == "update"){
            $filter = $_GET["filter"];
            $update = $_GET["date"];
            $obj1->update($filter,$update);
        }
        
        //删除数据
        else if($action == "delete"){
            $filter = $_GET("filter");
            $obj1->delete($filter);
        }
    ?>
  • 相关阅读:
    .NET Demon为Visual Studio提供持续编译和测试功能
    java面试题:字符串的排列算法
    JS实现IP地址判断
    明茨伯格管理进行时的读书感想:好书,适合有一定管理经验的人沉淀
    N个小时学MM IMG设定_存货管理和盘点 <四>
    上线第一天
    ISurfaceOp 接口生成等高线(一)
    出差合肥,路经武汉,后到长沙
    新博客
    出差合肥,路经武汉,后到长沙2
  • 原文地址:https://www.cnblogs.com/liaopeng123/p/11511585.html
Copyright © 2020-2023  润新知