转自:http://blog.sina.com.cn/s/blog_6324c2380100ux2m.html

MongoDB是最近比较流行的NoSQL数据库,网络上关于PHP操作MongoDB的资料太少了,大部分都是英文文档,于是蜗牛我用蹩脚的英语为大家翻译一下来自PHP官方的文档,水平有限请多多见谅

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

<?php $connection = new Mongo(); //链接到 localhost:27017 $connection = new Mongo( "example.com" ); //链接到远程主机(默认端口) $connection = new Mongo( "example.com:65432" ); //链接到远程主机的自定义的端口 ?>

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

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

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

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

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

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

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

插入一个文档 多维数组是可以被储存到数据库中的基本单元 一个随机的文档可能是这样 <?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字段总是一个对象而不是一个文档, 本约束适用于所有文档

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

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

<?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″   } }

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

添加更多文档 为了做一些更有趣的事情,我们添加更多简单的文档到集合中,这些文档如下 <?php array( “i” => value ); ?>

我们可以使用循环相当有效的插入数据 <?php for($i=0; $i<100; $i++) {     $collection->insert( array( “i” => $i ) ); } ?> 注意:我们可以插入不同的字段在同一字符集中,在这方面意味着MongoDB拥有非常自由的储存模式

在一个集合中计算文档的数量 现在我们插入了101个文档(我们用循环插入了100个,之前还插入了一个),我们可以使用count()来看看我们的数据是不是都被插入进去了 <?php echo $collection->count(); ?> 这段代码将打印出101 MongoCollection::count() 也可以查询字段数据

使用游标得到集合中的所有文档 为了得到集合中的所有文档,我们可以使用 MongoCollection::find()方法,find()方法返回一个 MongoCursor对象,可以让我们重复得到查询 所匹配的的文档 <?php $cursor = $collection->find(); foreach ($cursor as $id => $value) {     echo “$id: “;     var_dump( $value ); } ?> 这样我们会打印出集合中的这101个文档,$id就是文档中的_id字段,$value 就是文档本身

为查询规定一个标准 我们可以通过find()方法得到集合中的文档子集,例如,我们要查询出集合中i字段为71的文档,我们可以使用下列方法 <?php

$query = array( “i” => 71 ); $cursor = $collection->find( $query ); while( $cursor->hasNext() ) {     var_dump( $cursor->getNext() ); } ?> 我们将打印如下数据 array(2) {   ["_id"]=>   object(MongoId)#6 (0) {   }   ["i"]=>   int(71)   ["_ns"]=>   “testCollection” } 为查询设定一个范围 我们可以通过find()创建一个查询语句以得集合中的一个子集,例如如果我们得到所有”i”>50的文档,我们可以使用如下代码 <?php $query = array( “i” => array(‘$gt’ =>50)); //注意’$gt’两边的单引号 $cursor = $coll->find( $query );

while( $cursor->hasNext() ) {     var_dump( $cursor->getNext() ); } ?> 我们同样可以得到20 < i <= 30之间的数据 <?php $query = array( “i” => array( “\$gt” => 20, “\$lte” => 30 ) ); $cursor = $coll->find( $query );

while( $cursor->hasNext() ) {     var_dump( $cursor->getNext() ); } ?>

我们非常容易漏掉$美元符号,你也可以选择你自定义的符号来代替美元符号,选择一个不会在你的建里面出现的符号例如”:”,在php.ini中加上这么一句话 mongo.cmd = “:” 那么上面的代码就可以替换成 <?php $query = array( “i” => array( “:gt” => 20, “:lte” => 30 ) ); ?> 当然你也可以使用ini_set(“mongo.cmd”, “:”)的方法来改变

创建一个索引 MongoDB支持索引,并且可以很容易的加到一个集合中,你只要指定某个字段为索引就行了,并且还可以指定 正序索引(1)与倒序索引(-1) 下面的代码为I创建了索引 <?php $coll->ensureIndex( array( “i” => 1 ) );  //在”i”上创建了一个索引 $coll->ensureIndex( array( “i” => -1, “j” => 1 ) );//在”i”上创建了倒序索引 在”j”上创建了正序索引 ?>

一个简单的列子 这个例子展示了如何链接mongodb数据库,如何选择数据库,如何插入数据,如何查询数据,以及关闭数据库链接

<?php //链接 $m = new Mongo();
// 选择一个数据库 $db = $m->comedy; $collection = $db->cartoons;
//添加一个元素 $obj = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" ); $collection->insert($obj);
//添加另一个元素,使用不同的格式 $obj = array( "title" => "XKCD", "online" => true ); $collection->insert($obj);
//查询所有的集合 $cursor = $collection->find();
//重复显示结果 foreach ($cursor as $obj) {     echo $obj["title"] . "\n"; }
// 关闭链接 $m->close(); ?>

输出结果为 Calvin and Hobbes XKCD

PHP操作MongoDB简明教程(转)的更多相关文章

  1. 使用Python脚本操作MongoDB的教程

    Reference:  http://www.jb51.net/article/64225.htm

  2. Python 操作 MongoDB

    原文 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面上的教程一般都是讲解JavaScript的脚本操作,本文则是基于Pyt ...

  3. 【转】Python操作MongoDB

    Python 操作 MongoDB   请给作者点赞--> 原文链接 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面 ...

  4. ArcGIS Pro 简明教程(2)基础操作和简单制图

    ArcGIS Pro 简明教程(2)基础操作和简单制图 By 李远祥 本章主要介绍ArcGIS Pro如何加载数据并进行简单的地图制作,以基本的操作为主. 上一章节介绍过,ArcGIS Pro是可以直 ...

  5. MongoDB最简单的入门教程之四:使用Spring Boot操作MongoDB

    Spring Boot 是一个轻量级框架,可以完成基于 Spring 的应用程序的大部分配置工作.Spring Boot的目的是提供一组工具,以便快速构建容易配置的Spring应用程序,省去大量传统S ...

  6. 【MongoDB详细使用教程】四、python操作MongoDB

    目录 1.安装pymongo 2.连接数据库 3.操作数据库 3.1.查 3.2.增 3.3.改 3.4.删 使用第三方库pymongo来实现python对MongoDB的操作 pymongo官方文档 ...

  7. Python 简明教程 --- 25,Python 目录操作

    微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 做技术一定要一颗恒心,这样才不会半途而废. 目录 上一节我们介绍了文件相关的操作,本节我们来介绍目录 ...

  8. 2013 duilib入门简明教程 -- FAQ (19)

        虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下.     需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...

  9. Mac安装Windows 10的简明教程

    每次在Mac上安装Windows都是一件非常痛苦的事情,曾经为了装Win8把整台Mac的硬盘数据都弄丢了,最后通过龟速系统恢复模式恢复了MacOSX(50M电信光纤下载了3天才把系统下载完),相信和我 ...

随机推荐

  1. UILabel的简单用法和实际操作

    1.UILabel   **//设置文字 label.text = @"欢迎收看灌篮高手,我是安溪教练";**//设置文字颜色label.textColor = [UIColor  ...

  2. ionic Modal

    在ionic中,modal也是添加控制器写服务的~ 在modal.html页面中增加控制器:ng-controller="aboutCtrl"记住要给这个添加控制器.头部使其关闭按 ...

  3. 剑指Offer22 判断数组是否为某二叉搜索树的后序遍历

    /************************************************************************* > File Name: 22_Sequen ...

  4. 2013 长沙网络赛J题

    思路:这题对于其他能退出所有值的情况比较好像,唯一不能确定的是XXOXXOXXOXX这个形式的序列,其中XX表示未知,O表示已知. 我们令num[1]=0,那么num[4]=sum[3]-sum[2] ...

  5. [wordpress]wp-api-jwt-auth 尝试添加运行在多站点中 need change

    Hi,Thank you this plugin,because i use this plugin on Wordpress one Network,so the request other api ...

  6. Python之Python Imaging Library

    document:http://effbot.org/imagingbook/pil-index.htm http://pillow.readthedocs.io/en/3.1.x/index.htm ...

  7. js中关于数据类型的转换

    * 一.转化为数字*/console.log(‘123123’*1.0); /* 二.从一个值中提取另一中类型的值,并完成转化工作 */console.log(parseInt(‘1233zxhag’ ...

  8. echo,printr,print_r之间的区别

    echo 返回值是void,可以一次输出多个值,多个值之间用逗号分隔.echo是语言结构(language construct)也就是关键字,而并不是真正的函数,因此不能作为表达式的一部分使用.使用的 ...

  9. Java开发从零开始填坑

    开始学习Java,感觉较.NET知识更零碎一些,所以开个帖子把自己踩过的坑记录下来,都是边边角角网上不容易找到的东西. 1.java命令格式:>cd %parent-of-pakadgePath ...

  10. 十六、Android 滑动效果汇总

    Android 滑动效果入门篇(一)—— ViewFlipper Android 滑动效果入门篇(二)—— Gallery Android 滑动效果基础篇(三)—— Gallery仿图像集浏览 And ...