php操作mongodb笔记!


//格式=>("mongodb://用户名:密码@地址:端口/默认指定数据库",参数)
  $conn = new Mongo("mongodb://127.0.0.1:27017"); // 连接到mongodb


//连接mongodb数据库
$conn = new MongoClient();

//选择数据库和文档集合
$db  = $conn->mydb;  #选择mydb数据库 
$db  = $conn->selectDB(“mydb”); #选择mydb数据库 第二种写法

$collection = $db->test; #选择集合(选择’表’)
$db->selectCollection(‘column’); #选择集合(选择’表’)第二种写法

$collection = $conn->local->User;#更简洁的写法,一步到位

#插入一条记录
$res = $collection->insert(array("id"=>1,"username"=>"admin","age"=>18,"email"=>"admin@qq.com"));
#根据条件更新数据
$res = $collection->update(array("username"=>"admin"),array("$set"=>array("age"=>25)));
#根据条件删除数据
$res = $collection->remove(array("username"=>"test"));
#查询一条记录
$res = $collection->findOne(array("username"=>"admin"));
#查询 
$res = $collection->find();
#根据正则查询符合条件数据
$res = $collection->find(array("username"=>new MongoRegex("/admin/i")));
//db.User.find({"username":/admin/i}) #原生态模糊查询(/XXX/i 正则忽略大小写)

#统计数量
$res = $collection->count();
#带条件的统计
$res = $collection->count(array("username"=>new MongoRegex("/admin/i"),'age'=>array('$gt'=>21,'$lt'=>80)));
#带条件的统计另一种写法
$res = $collection->find(array("username"=>new MongoRegex("/admin/i"),'age'=>array('$gt'=>21,'$lt'=>80)))->count();
 
#注:$gt为大于、$gte为大于等于、$lt为小于、$lte为小于等于、$ne为不等于、$exists不存在 

#分页取数据
$count = $collection->find()->limit(10)->skip(10)->count(true);
//#获得实际返回的结果数 (count()或count(0)或count(false)返回全部数据,count(1)或count(true)返回分页数据)

//true显示列,false隐藏列   sort排序:-1=desc 1=asc
$res = $collection->find(array('age' => array('$gt' => 23, '$lt' => 93)))->fields(array("age" => true, "_id" => false))->sort(array('age' => -1));


/** 创建索引
 $collection->ensureIndex(array('age' => 1,'type'=>-1));                             #1表示降序 -1表示升序
$collection->ensureIndex(array('age' => 1,'type'=>-1),array('background'=>true));   #索引的创建放在后台运行(默认是同步运行)
$collection->ensureIndex(array('age' => 1,'type'=>-1),array('unique'=>true));       #该索引是唯一的
*/

******************************************mongodb复制远程数据库和表start******************************************************************

        $con1 = new Mongo("mongodb://192.168.1.243:7788"); // 连接到服务器
        $con2 = new Mongo("mongodb://127.0.0.1:27017"); // 连接到本地
        $db1 = $con1->ak_sys;
        $db2 = $con2->ak_sys;
        $res1 = $db1->feedback->find();
       
        foreach ($res1 as $k => $v) {
        //echo"<pre>";print_R($v); 

        $res2 = $db2->feedback->insert($v);#简单插入 
        echo $res2['ok']? 'success' : 'failed';
        echo "<br/>";
        }

******************************************mongodb复制远程数据库和表end******************************************************************

******************************************where条件可以用js函数方式start******************************************************************
        $where['$where'] = "
            function(){
            var pos_code = this.pos_code;
            var count= this.count;
            if(pos_code =='d' && count==0){
                return true;
                }
            }";
        $res = $db2->feedback->find($where);
*******************************************where条件可以用js函数方式end******************************************************************


日期转换时间戳,再用mongoDate函数:new MongoDate(strtotime(date("Y-m-d H:i:s"))); 
demo:
 $start = new MongoDate(strtotime(date("2011-02-15 00:00:00"))); 
 $end = new MongoDate(strtotime(date("2017-12-15 23:59:59")));  

查询分组统计
        $where['$match'] = array(
            'click_time' => array('$gt' => $start, '$lte' => $end));
        //管道效应:group中的click_time是where传过来的
        $group['$group'] = array(
            '_id' => array(
                'year' => array('$year' => '$click_time'),
                'month' => array('$month' => '$click_time'),
                'day' => array('$dayOfMonth' => '$click_time')
            ),
            'total' => array('$sum' => 1)
        );



        $res = $db2->test->aggregate($where, $group);
        // echo count($res['result']);//获取分组后的总数量
        //  echo"<pre>";print_R($res);
 echo $db2->test->find(array('click_time'=>array('$gte' => $start, '$lte' => $end)))->count();
        $res = $db2->test->find(array('click_time' => array('$gt' => $start, '$lte' => $end)));


//        foreach ($res['result'] as $k => $v) {
//            $v['click_time'] = date('Y-m-d H:i:s', $v['click_time']->sec);
//            $v['create_time'] = date('Y-m-d H:i:s', $v['create_time']->sec);
//            $v['_id'] = $v['_id']->{'$id'}; //取mongoid字符串
//            echo"<pre>";
//            print_R($v);
//        }
where模糊查询分组排序分页
        $op = array(
            array(
                '$match' => array(
                    'click_time' => array(
                        '$gte' => $start,
                        '$lte' => $end
                    ),
                    'pos_code' => new MongoRegex('/^dd$/'),//正则匹配pos_code含有dd字符的
                    'remark' =>'', //等于空 
                    'title' => array('$ne'=>null),//不等于空
                )),
            array(
                '$group' => array(
                    '_id' => array(
                        'dev_id' => '$dev_id',
                        'pos_code' => '$pos_code',
                        'status' => '$status',
                        'title'=>'$title',
                        'year' => array('$year' => '$click_time'),
                        'month' => array('$month' => '$click_time'),
                        'day' => array('$dayOfMonth' => '$click_time')
                    )
                )
            ),
             array('$sort' => array('click_time' => -1)),
             array('$skip' => 0),
            array('$limit' => 100),
        );

        $res3 = $db2->test->aggregate($op);
        echo"<pre>";
        print_R($res3);
        die;



        //$result = $db2->test->update(array('img_url'=>' '),array('$set'=>array("pos_code"=>time())));//更新文档
        // echo $result ? 'success' : 'failed';echo "<br>";



原生态mongodb操作方法:
  MONGODB:数据库(db)->集合(table)->文档(row)
 D:\mongodb\bin>mongod.exe --dbpath "d:\set up\mongodb\data" //设置mongodb数据路径:
 D:\mongodb\bin>mongo.exe//启动mongodb 
 >use mydb//创建数据库 返回数据库名称
>db mydb//查看数据库信息
>show dbs//查看数据库(创建的数据库mydb 列表中是不存在的。要显示的数据库,需要把它插入至少一个文件。)
 db.movie.insert({"name":"tutorials point"})
 db.movie.save({"name":"tutorials point"})//保存数据
  >use mydb
  >db.dropDatabase()//删除数据库 
  >use test //创建集合{ 当插入一些文件 MongoDB 自动创建的集合。}
  >db.createCollection("mycollection")
  >show collections//查看创建集合
  >db.集合名称.drop()//删除集合
  >db.集合名称.find()//查询集合
  >db.hello.find().pretty()//格式化返回集合数据
  >db.hello.find({key1:value1, key2:value2}).pretty()//根据条件查询  AND
  >db.hello.find({$or:[{key1:value1},{key2:value2}]}).pretty()//根据条件查询  OR
  >db.hello.find("age": {$gt:10}, $or: [{"name": "li"}, {"title": "book"}] }).pretty()//AND 和  OR
 //where age >10 and(name=li or title =book )
 //可以使用操作符完成更复杂的操作,常用操作符有:$lt , $lte , $gt , $gte   ( < , <= , > , >= ), $ne ( <> ) ,$in , $nin ,  $or ,  $not,  $mod (取模),  $exists, $where 
 //db.hello.find( {"age" : { “$lt” : 20 } } )
  >db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)//更新文档值(MongoDB默认将只更新单一的文件,来更新多个你需要设置参数置'multi' 为true)
  >db.hello.update({'name':'lis'},{$set:{'name':'dragoners.li','age':23}})
  >db.hello.remove({'name':'abc'})//删除记录
  >db.hello.remove({'name':'abc'},1)//删除一条记录
  >db.hello.remove({})//全部删除相当于mysql的truncate
  >db.hello.find({},{"name":'abc',_id:0})//_id:0把_id设置为0.返回。类似mysql的视图。
  >db.hello.find().limit(3)//类似mysql的limit(0,3)从0开始取3条记录。(参数不写或写0时返回全部)
  >db.hello.find().limit(3).skip(2)//类似mysql的limit 限制记录条件,skip忽略前N条记录
   //Sort   :  排序   -1(降序) 1(升序);
  //Count: 记录数
 //getIndexes()  获取索引信息
// dropIndexes()  : 删除所有索引
//dropIndex( name )删除某个索引
    原文作者:DragonersLi
    原文地址: https://www.jianshu.com/p/90784d166fdf
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞