php中的mongodb select常用操作代码示例_php实例_脚本之家

日期: 2019-12-17 17:12 浏览次数 :

前面说到了mongodb安装,配置,集群,以及php的插入与更新等,请参考:mongodb。下面说一下,mongodb select的常用操作

来源:

测试数据:复制代码 代码如下:{ "_id" : 1, "title" : "红楼梦", "auther" : "曹雪芹", "typeColumn" : "test", "money" : 80, "code" : 10 } { "_id" : 2, "title" : "围城", "auther" : "钱钟书", "typeColumn" : "test", "money" : 56, "code" : 20 } { "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 } { "_id" : 4, "title" : "将近酒", "auther" : "李白", "money" : 90, "code" : 40 }

PHP 扩展mongon.mod.dll 下载)
然后php.ini添加 extension=php_mongo.dll
最后phpinfo() 查找到
图片 1
表标PHP已经自带了mongo功能,你就可以操作下面的代码(但是你必须有安装mongodb服务器)

1、取表条数复制代码 代码如下:> db.books.count(); 4 > db.books.find; 4 > db.books.count; 2 > db.books.find({money:{$gt:40,$lte:60}}).count(); 1 > db.books.count({money:{$gt:40,$lte:60}}); 1

链接数据库
使用下面的代码创建一个数据库链接

php代码如下,按顺序对应的:复制代码 代码如下:$collection->count(); //结果:4 $collection->find; //结果:4 $collection->count); //结果:2 $collection->find(array("money"=>array))->count(); //结果:1 $collection->count(array("money"=>array)); //结果:1

<?php
$connection = new Mongo(mongodb://192.168.1.5:27017); //链接到 192.168.1.5:27017//27017端口是默认的。
$connection = new Mongo( "example.com" ); //链接到远程主机(默认端口)
$connection = new Mongo( "example.com:65432" ); //链接到远程主机的自定义的端口
print_r($connection->listDBs());//能打印出数据库数组,看看有几个数据库。
如图
图片 2
上图说有一个数据库名字叫local,总大小1个字节,他是空的。看见ok表示运行成功。

提示:$gt为大于、$gte为大于等于、$lt为小于、$lte为小于等于、$ne为不等于、$exists不存在、$in指定范围、$nin指定不在某范围

?>

2、取单条数据

现在你可以使用$connection链接来操作数据库了

复制代码 代码如下:> db.books.findOne(); { "_id" : 1, "title" : "红楼梦", "auther" : "曹雪芹", "typeColumn" : "test", "money" : 80, "code" : 10 } > db.books.findOne; { "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 }

选择数据库
使用下面的代码来选择一个数据库

php代码如下,按顺序对应的复制代码 代码如下:$collection->findOne(); $collection->findOne);

<?php
$db = $connection->dbname;
?>

3、find snapshot 游标

这里的数据库并不一定是一个已经存在的数据库,如果所选择的数据库不存在,则会新建一个数据库,所以在选择数据库的时候,注意一定要填上正确的数据库名
如果拼写错误的话,很有可能会新建一个数据库

复制代码 代码如下:> db.books.find( { $query: {auther: "李白" }, $snapshot: true } ); { "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 } { "_id" : 4, "title" : "将近酒", "auther" : "李白", "money" : 90, "code" : 40 }

<?php
$db = $connection->mybiglongdbname;
//做一些事情
$db = $connection->mybiglongdbnme;
//现在会连上一个新的数据库
?>

php代码如下:复制代码 代码如下:/** * 注意: * 在我们做了find()操作,获得 $result 游标之后,这个游标还是动态的. * 换句话说,在我find()之后,到我的游标循环完成这段时间,如果再有符合条件的记录被插入到collection,那么这些记录也会被$result 获得. */ $result = $collection->find)->snapshot(); foreach ($result as $id => $value) { var_dump; }

获取一个集合
获取一个集合跟选择数据库拥有相同的语法格式

4、自定义列显示

<?php
$db = $connection->baz;//选择数据库
$collection = $db->foobar;//选择foobar集合
//或者使用更简洁的方式
$collection = $connection->baz->foobar;
?>

复制代码 代码如下:> db.books.find({},{"money":0,"auther":0}); //money和auther不显示 { "_id" : 1, "title" : "红楼梦", "typeColumn" : "test", "code" : 10 } { "_id" : 2, "title" : "围城", "typeColumn" : "test", "code" : 20 } { "_id" : 3, "title" : "朝发白帝城", "typeColumn" : "test", "code" : 30 } { "_id" : 4, "title" : "将近酒", "code" : 40 } > db.books.find; //只显示title列 { "_id" : 1, "title" : "红楼梦" } { "_id" : 2, "title" : "围城" } { "_id" : 3, "title" : "朝发白帝城" } { "_id" : 4, "title" : "将近酒" } /** *money在60到100之间,typecolumn和money二列必须存在 */ > db.books.find({money:{$gt:60,$lte:100}},{"typeColumn":1,"money":1}); { "_id" : 1, "typeColumn" : "test", "money" : 80 } { "_id" : 4, "money" : 90 }

插入一个文档
多维数组是可以被储存到数据库中的基本单元
一个随机的文档可能是这样
<?php

php代码如下,按顺序对应的:

$doc = array(
 ”name” => “MongoDB”,
    “type” => “database”,
    “count” => 1,
    “info” => (object)array( “x” => 203,
    “y” => 102),
    “versions” => array(“0.9.7″, “0.9.8″, “0.9.9″)
);
?>
注意:你可以嵌套数组与对象,对象与文档在mongodb中几乎是一样的,你可以使用$doc调用一个文档或对象,但是info字段总是一个对象而不是一个文档,
本约束适用于所有文档

复制代码 代码如下:$result = $collection->find()->fields(array("auther"=>false,"money"=>false)); //不显示auther和money列 $result = $collection->find()->fields; //只显示title列 /** *money在60到100之间,typecolumn和money二列必须存在 */ $where=array('typeColumn'=>array,'money'=>array('$exists'=>true,'$gte'=>60,'$lte'=>100)); $result = $collection->find;

使用MongoCollection::insert()插入一个文档
<?php
$m = new Mongo();
$collection = $m->foo->bar;
$collection->insert($doc);
?>

5、分页

mongodb 的 insert()、save()  ,区别主要是:若存在主键,insert()  不做操作,而save() 则更改原来的内容为新内容。

复制代码 代码如下:> db.books.find; //跳过第条,取一条 { "_id" : 2, "title" : "围城", "auther" : "钱钟书", "typeColumn" : "test", "money" : 56, "code" : 20 }

存在数据:  { _id : 1, " name " : " n1 " }

这根mysql,limit,offset有点类似,php代码如下:复制代码 代码如下:$result = $collection->find;//跳过 1 条记录,取出 1条

insert({ _id : 1, " name " : " n2 " })    会提示错误

6、排序

save({ _id : 1, " name " : " n2 " })     会把 n1 改为  n2  。

复制代码 代码如下:> db.books.find().sort; //1表示降序 -1表示升序,参数的先后影响排序顺序 { "_id" : 3, "title" : "朝发白帝城", "auther" : "李白", "typeColumn" : "test", "money" : 30, "code" : 30 } { "_id" : 2, "title" : "围城", "auther" : "钱钟书", "typeColumn" : "test", "money" : 56, "code" : 20 } { "_id" : 1, "title" : "红楼梦", "auther" : "曹雪芹", "typeColumn" : "test", "money" : 80, "code" : 10 } { "_id" : 4, "title" : "将近酒", "auther" : "李白", "money" : 90, "code" : 40 }

使用MongoCollection::findOne()查询文档
为了证明上面那段代码的数据已经插入到数据库里了,我们进行简单的 findOne()操作以得到集合中的第一个文档数据,这种方法只返回一个文档数据,
这种方法适用于在你的查询语句的时候只匹配一个文档或者你只关心第一条数据

php代码如下:复制代码 代码如下:$result = $collection->find()->sort(array('code'=>1,'money'=>-1));

<?php
$obj = $collection->findOne();
var_dump( $obj );
?>
你会看到下列结果
array(5) {
  ["_id"]=>
  object(MongoId)#6 (0) {
  }
  ["name"]
  string(7) “MongoDB”
  ["type"]=>
  string(8) “database”
  ["count"]=>
  int(1)
  ["info"]=>
  array (2) {
    ["x"]=>
    int(203)
    ["y"]=>
    int(102)
  }
  ["versions"]
  array(3) {
    [0]=>
    string(5) “0.9.7″
    [1]=>
    string(5) “0.9.8″
    [2]=>
    string(5) “0.9.9″
  }
}

7、模糊查询

注意_id字段自动加载了文档上,MongoDB储存元素中以_以及$开头的都是供内部使用的