php 操作mogo常用命令

最近在学习mongo,做一点总结:

1.用php连接mongodb:

$client = new MongoClient();//连接mongodb,构造函数可以有参数,默认连接mongodb://localhost:27017,得到了一个连接对象

$client = new Mongo();也是连接mongodb,但是该类已经过时,使用会给出小错误,不建议使用

2.连接对象支持的操作简介:

$client->close();关闭连接

$client->selectDB(DBName);选择数据库DBName,如果不存在就抛出异常。类似mysql连接后需要选库一样

$client->listDBs();查看当前连接下有多少个数据库

$client->dropDB();删除一个数据库,但是已经废弃

$client->getCollections()获取连接信息

还有其他一些支持的方法和属性,详见php文档........

3.选库:

$db = $client->selectDB('mydb');选择mydb库

$db = $client->mydb;选择mydb库,和上面一样都是返回一个$db对象

$db->listCollections();列出当前db下有哪些集合

$col = $db->createCollection('aaa');创建集合aaa,并返回集合对象$col

$col = $db->command(参数);同上,也是可以创建一个集合,该指令可以执行很多Mongo命令,,,,,,

$db->getCollectionNames();获取db中所有集合的名称

$db->dropCollection('test');删除集合test

$col = $db->test;选中test集合

$col = $db->selectCollection('test');同上,也是选择某个集合

其他例如getDBRef()等函数,可参看文档

4.选择集合:

$col = $db->myct;选中集合myct

$col = $db->selectCollection(‘myct’);同上也是选中myct集合

5.集合操作之增:

$col->insert(array,options);

其中array表示需要插入的数据,一般都是一个数据。

options表示插入数据的参数,支持5个参数:

fsync 默认为false,如果为true,那么在插入数据成功前,会强制将数据写入硬盘。如果该参数为true,那么w参数无论是什么值,都将被置为0

j 默认为false,如果为true,那么在插入数据成功前,会强制将数据写入日志。如果mogodb突然宕机,那么这些写入到日志的数据变更是可以恢复的

w默认值为1,用于确认或者不确认写操作。设置为1,写操作将会被(主)服务器确认。如果设置为n,则主服务器修改数据操作成功的复制到n个节点后确认写操作。

wtimeout服务器等待接收确认的时间,单位为毫秒

timeout客户端等待服务器响应的超时时间,默认为毫秒。

6集合之查询:

$col->findOne(where,field)查找一个文档

其中where标示查询的条件,field标示需要返回文档中的哪些字段

$res = $col->findOne(array('x'=>1,'y.b.b'=>array(1,3)),array('y.a','x'));标示查询出x值为1,并且y.b.b值为数组1,3的集合,返回y.a和x字段的值

$col->find(where,field)

$m = $col->find(array('x'=>1));返回x值为1的文档,如果有多个文档,那么$m就是一个mongoCursor对象,可以通过foreach循环来获取每一个文档的信息

7.对查询结果进行过滤:

$res = $col->find(array('x'=>1)).skip(1)->limit(1);对查询出的文档忽略第一条数据,然后只获取一条数据,也就是获取第二条数据。

8,对查询出的结果进行数量统计:

$count = $col->find(array('x'=>1))->count();统计出x值为1的文档数量

如果count要和skip,limit配合使用,那么需要给参数true,否则将忽略skip,limit函数的作用
9.条件操作符$lt,$gt,$lte,$gte使用:

$res = $col->find(array('x'=>array('$lt'=>3)));查询出x小于3的文档

$res = $col->find(array('x'=>array('lt'=>6,'$gt'=>1)))查询出x大于1小于6的文档;

10.$ne使用:

$res = $col->find(array('x'=>array('$ne'=>3)));查询出x不等于3的文档

11 $in和$nin使用:

$res = $col->find(array('y.a'=>array('$in'=>array(1,3))));查询出y.a值为1或者3的文档

$res = $col->find(array('y.a'=>array('$nin'=>array(1.3))));查询出y.a值不为1或者3的文档,其中也会查询y.a不存在的文档

12.$all完全匹配:

$res = $col->find(array('y.a'=>array('$all'=>array(1,3))));查询出y.a值为数组,数组值包含1,3的文档

$res = $col->find(array('y.a'=>array('$eq'=>array(1,3))));查询出y.a值为数组,数组值等于1,3的文档

13.$or:

$res = $col->find(array('$or'=>array(array('x'=>array('$ne'=>1)),array('y.a'=>array('$gt'=>3)))));查询出x不等于1或者y.a大于3的文档

14.$slice使用,用来限制返回值数值的个数:

$slice可对字段的值进行裁剪,如果该字段为一个数组,数组中有多个值,那么可使用$slice来指定输出数组的值的个数。

$res = $col->find(array('x'=>1,'y.a'=>1),array('y.b'=>array('$slice'=>2)));查询出x等于1,y.a包含1的文档,输出y.b的数据时只去前2个数值

array('$slice'=>-2);表示取最后两个数值。

array('$slice'=>array(1,3));表示忽略第一个文档,结果取3条文档

15.$exists

$res = $col->find(array('c'=>array('$exists'=>true)));查询出c字段存在的文档

$res = $col->find(array('c'=>array(''$exists'=>false)));查询出c字段不存在的文档

16.使用正则查找,需要使用MongoRegex类,,,,,,略,,,,,查看手册.....


17.php更新数据:

$col->update(where,updateData,options);

其中where表示更新哪些文档,updateData表示需要更新的数据,options表示更新的参数,其中参数包括其中几个:

upsert:如果设置为true,那么如果没有查询到文档,那么就新增一条文档

multiple:如果设置为true,那么如果查询出多条文档,那么全部都更新

j:默认假,如果设置为true,那么在更新结果返回前,会写日志。

fsync:如果设置为true,那么在更新结果返回前,需同步数据到磁盘。如果设置了该值为true,那么无论w为何值,都强制变为0

w:如果设置为n,那么主服务器将更新复制到第n个从节点后确认该操作,默认是0

wtimeout:服务器等待接收确认的超时时间,单位为毫秒

timeout:客户端等待服务器返回数据的时间,单位为毫秒

18.$inc使用,增加值

$res = $col->update(array('x'=>1),array('$inc'=>array('x'=>2)));查询出x等于1的文档,并将x的值加2,只会更新查询出来的第一条文档

19 $set修改值

$res = $col->update(array('x'=>4,array('$set'=>array('y.a'=>array(1,2,3)))));查询出x等于4的文档,将其y.a的值改为数组1,2,3

20 $unset删除字段

$res = $col->update(array('x'=>4,'y.a'=>array(1,2,3)),array('$unset'=>array('y.b'=>1)));删除y.b

21.$rename更新字段名字

$res = $col->update(array('x'=>4),array('$rename'=>array('x'=>'xx','y'=>'yy')));把x值为4的文档,x变更为xx,y变更为yy

22.$push向字段中添加值

$res = $col->update(array('x'=>4),array('$push'=>array('y'=>'44')));向x等于4的文档中对y插入44.如果y不存在就创建;如果y的值不是数组就给出异常

23.如何一次插入多个值呢?

例如:插入前:


如果我想往y.b.a中插入4,5,那么该如何插入呢?

$res = $col->update(array('x'=>4),array('$push'=>array('y.b.a'=>array(4,5))));结果像这样插入:


与我们的目标不一样,

可这样:

$res = $col->update(array('x'=>4),array('$push'=>array('y.b.a'=>array('$each'=>array(5,6)))));

结果如下:


24.$addToSet不存在添加,即添加的数据不存在的时候就添加,如果存在就不添加。

$res = $col->update(array('x'=>4),array('$addToSet'=>array('y.b.a'=>array('$each'=>array(6,7)))));

结果:


由于目标数组中有6,所以只有7添加进去了

$res = $col->update(array('x'=>4),array('$addToSet'=>array('y.b.a'=>4)));

添加一条记录:


25.$pop删除数组中的元素,-1标示删除第一个,1标示删除最后一个:

$res = $col->update(array('x'=>4),array('$pop'=>array('y.b.a'=>1)));


$res = $col->update(array('x'=>4),array('$pop'=>array('y.b.a'=>-1)));


最前面的1被删除了

$res = $col->update(array('x'=>4),array('$pop'=>array('y.b.a'=>array('$each'=>array(2,3)))));本打算批量删除的,结果这样写把最后的一个7给删除了,真奇怪,,,咋批量删除啊啊啊!!!!!!!!!!!!!!!!!!!!!

26.$pull删除操作,,,差啊,

$res = $col->update(array('x'=>4),array('$pull'=>array('y.b.a'=>2)));

删除2

批量删除,删除3和6:

$res = $col->update(array('x'=>4),array('$pullAll'=>array('y.b.a'=>array(3,6))));


27.删除数据

remove(where ,options);删除数据

where表示删除的条件,options表示删除选项,其中包括如下参数:

justOne:如果设置为true,那么只会删除一个文档,默认为false.

fsync:如果设置为true,那么在数据更新结果返回前会同步数据到磁盘。如果设置为true,那么无聊w设置为什么,都会强制设置为0

w:如果设置为false,那么更新操作将不会确认。如果设置为n,那么在数据更新到第n个节点后确认操作。

j:如果设置为true,那么会在更新结果返回前,写日志,默认为false

wtimeout:等待确认时间,单位为毫秒,默认为10000

timeout:客户端等待服务端数据返回超时时间,默认为10000毫秒

28 删除整个库drop

$m = $c->mm->drop();删除mm库

后续更新.....



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值