php7的mongodb基本用法
下面用PHP7新的API总结一下:
一:CURD
1:链接
<?php //链接mongodb $manager = new MongoDB\Driver\Manager('mongodb://root:123@10.10.10.104:27017'); root 用户;123:密码;如果没有密码则不写
2:查询
<?php //链接mongodb $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017'); //查询 $filter = ['user_id'=>['$gt'=>0]]; //查询条件 user_id大于0 $options = [ 'projection' => ['_id' => 0], //不输出_id字段 'sort' => ['user_id'=>-1] //根据user_id字段排序 1是升序,-1是降序 ]; $query = new MongoDB\Driver\Query($filter, $options); //查询请求 $list = $manager->executeQuery('location.box',$query); // 执行查询 location数据库下的box集合 foreach ($list as $document) { print_r($document); }查询更多条件使用方法,参考第二节mongodb基本命令,查询
3:添加
<?php //链接mongodb $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017'); $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行 //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行 $bulk->insert(['user_id' => 2, 'real_name'=>'中国',]); $bulk->insert(['user_id' => 3, 'real_name'=>'中国人',]); $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合
4:修改
<?php //链接mongodb $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017'); $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行 //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行 $bulk->update( ['user_id' => 2], ['$set'=>['real_name'=>'中国国'] ]); //$set相当于mysql的 set,这里和mysql有两个不同的地方, //1:字段不存在会添加一个字段; //2:mongodb默认如果条件不成立,新增加数据,相当于insert //如果条件不存在不新增加,可以通过设置upsert //db.collectionName.update(query, obj, upsert, multi); $bulk->update( ['user_id' => 5], [ '$set'=>['fff'=>'中国国'] ], ['multi' => true, 'upsert' => false] //multi为true,则满足条件的全部修改,默认为true,如果改为false,则只修改满足条件的第一条 //upsert为 treu:表示不存在就新增 ); $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合ordered 设置
1:默认是ture,按照顺序执行插入更新数据,如果出错,停止执行后面的,mongo官方叫串行。
2:如果是false,mongo并发的方式插入更新数据,中间出现错误,不影响后续操作无影响,mongo官方叫并行
5:删除
<?php //链接mongodb $manager = new MongoDB\Driver\Manager('mongodb://root:sjhc168@10.10.10.104:27017'); $bulk = new MongoDB\Driver\BulkWrite; //默认是有序的,串行执行 //$bulk = new MongoDB\Driver\BulkWrite(['ordered' => flase]);//如果要改成无序操作则加flase,并行执行 $bulk->delete(['user_id'=>5]);//删除user_id为5的字段 $manager->executeBulkWrite('location.box', $bulk); //执行写入 location数据库下的box集合 delete还可以通过limit设置不同删除方式 $bulk->delete(['user_id' => 1], ['limit' => 1]); // limit 为 1 时,删除第一条匹配数据 $bulk->delete(['user_id' => 2], ['limit' => 0]); // limit 为 0 时,删除所有匹配数据,默认删除所有
6:捕获异常
MongoDB\Driver\Exception\AuthenticationException MongoDB\Driver\Exception\BulkWriteException MongoDB\Driver\Exception\ConnectionException MongoDB\Driver\Exception\ConnectionTimeoutException MongoDB\Driver\Exception\Exception //所有驱动程序异常的公共接口 MongoDB\Driver\Exception\ExecutionTimeoutException MongoDB\Driver\Exception\InvalidArgumentException MongoDB\Driver\Exception\LogicException MongoDB\Driver\Exception\RuntimeException MongoDB\Driver\Exception\SSLConnectionException MongoDB\Driver\Exception\UnexpectedValueException MongoDB\Driver\Exception\WriteException说明:http://php.net/manual/zh/class.mongodb-driver-exception-authenticationexception.php
二:mongodb控制台管理:
1:基本命令:
show dbs 查看有多少个数据库
db 查询当前数据库
show tables;或者 show collections;查询当前数据库有多少个集合。
db.c1.drop() 删除c1集合
db.dropDatabase() 删除数据库
db.createCollection("c1") 创建 c1集合
db.createCollection("c1",{capped:true,size:10000000,max:5}) 创建 c1固定集合,大小10M,如果容量不到10M,超过5条,自动增减
db.c1.stats() 查看c1集合信息
2:增删改查
db.c1.insert({name:"li"}) 往c1集合里增加一条记录
db.c1.save 同上,但是如果ID相同则是更新,不同则是增加
db.c1.find() 查看c1里的所有记录
db.c1.find({name:"123"})查询 name=123的所有记录
db.c1.find({name:"123"},{name:1}) 查询 name=123的所有记录 显示字段只要name。 1为显示,0为不显示
db.c1.find({"name":{$gt:5}}) 查询name>5的 $gt:>;$ne:! =;$gte>=;$lte=<;$lt<
db.c1.find({"name":{$gt:5,$lt:10}})大于5小于10
db.c1.count()或者 db.c1.find().count() 统计
db.c1.find().sort({name:1})根据name 排序,1是升序,-1是降序
db.c1.find().limit(3)取3个
db.c1.find().skip(1).limit(3)相当于mysql中limit(1,3)skip跳过一个。
db.c1.find().sort({name:1}).skip(1).limit(3).count(1):如果count里面没有参数,或者是0的时候,前面的条件自动忽略。
db.c1.find({name:{$exists:1}}) exosts:判断字段name是否为真(存在)
db.c1.find({name:{$in:[1,2,3]}}) 类似于mysql in,查询name为1,2,3
db.c1.find({$or:[{name:"1"},{name:"2"}]}) 查询name=1 或者 name=2 如果是$nor则是过滤掉这些。
实例:db.collection.update(ceiteria,objNew,upsert,multi) upsert 真为如果条件没有新加一条,multi 为真更新多条,默认为0,0一般为0,1
db.c1.update({name:"li"},{$set:{name:"lic"}},0,1) 或者 db.c1.update({name:"li"},{$set:{name:"lic"}},{upsert:false,multi:true})把li改成lic
db.c1.remove() 删除c1集合 括号里面可以加条件。
3:管理篇:
db.c1.find({name:"li"}).explain() 获取查询请求的过程
db.c1.ensureIndex({name:1})给集合c1建立一个name索引,1为升序,-1降序,默认升序。
添加索引可能很费时间,后台执行需参数{background:true}
db.c1.ensureIndex({name:1},{unique:1})唯一索引
db.c1.getIndexKeys() 查看索引
db.c1.dropIndex({age:1})删除索引age
db.c1.isCapped()查看是否固定集合