PHP操作MongoDB简明教程(转)
转自: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简明教程(转)的更多相关文章
- 使用Python脚本操作MongoDB的教程
Reference: http://www.jb51.net/article/64225.htm
- Python 操作 MongoDB
原文 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面上的教程一般都是讲解JavaScript的脚本操作,本文则是基于Pyt ...
- 【转】Python操作MongoDB
Python 操作 MongoDB 请给作者点赞--> 原文链接 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面 ...
- ArcGIS Pro 简明教程(2)基础操作和简单制图
ArcGIS Pro 简明教程(2)基础操作和简单制图 By 李远祥 本章主要介绍ArcGIS Pro如何加载数据并进行简单的地图制作,以基本的操作为主. 上一章节介绍过,ArcGIS Pro是可以直 ...
- MongoDB最简单的入门教程之四:使用Spring Boot操作MongoDB
Spring Boot 是一个轻量级框架,可以完成基于 Spring 的应用程序的大部分配置工作.Spring Boot的目的是提供一组工具,以便快速构建容易配置的Spring应用程序,省去大量传统S ...
- 【MongoDB详细使用教程】四、python操作MongoDB
目录 1.安装pymongo 2.连接数据库 3.操作数据库 3.1.查 3.2.增 3.3.改 3.4.删 使用第三方库pymongo来实现python对MongoDB的操作 pymongo官方文档 ...
- Python 简明教程 --- 25,Python 目录操作
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 做技术一定要一颗恒心,这样才不会半途而废. 目录 上一节我们介绍了文件相关的操作,本节我们来介绍目录 ...
- 2013 duilib入门简明教程 -- FAQ (19)
虽然前面的教程几乎把所有的知识点都罗列了,但是有很多问题经常在群里出现,所以这里再次整理一下. 需要注意的是,在下面的问题中,除了加上XML属性外,主窗口必须继承自WindowImpl ...
- Mac安装Windows 10的简明教程
每次在Mac上安装Windows都是一件非常痛苦的事情,曾经为了装Win8把整台Mac的硬盘数据都弄丢了,最后通过龟速系统恢复模式恢复了MacOSX(50M电信光纤下载了3天才把系统下载完),相信和我 ...
随机推荐
- 如何使用NSOperations和NSOperationQueues(二)
"每一个应用程序至少有一个主线程.线程的工作就是去执行一系列的指令.在Cocoa Touch中,主线程包含应用程序的主运行回路.几乎所有你写的代码都会在主线程中执行,除非你特别创建" ...
- 懒加载异常:org.hibernate.LazyInitializationException: could not initialize proxy - no Session
病症:这是一个lazy使用后的Exception,使用迟时加载,在session(hibernate里的session),关闭后使用该对象的未加载变量,也就是说session已经关闭,没有保存到内存中 ...
- [Java] SSH框架笔记_Struts2配置问题
1.Unable to load bean: type: class:com.opensymphony.xwork2.ObjectFactory - bean - jar:file:/D:/Progr ...
- react-redux 学习笔记
react 是 view 层的一个框架,负责展示数据:redux 控制数据流动,把数据存在唯一的 store 里,通过 action 来触发事件,reducer 来根据事件处理数据. redux 在通 ...
- 关于URLEncoder的编码和URLDecode解码
在我们开发中,很多时候会遇见各种编码乱码的问题,其实这都是编码不一致的问题,如果你懂得了关于URLEncoder的编码和URLDecode解码,那么问题就会随之消失! 下面我们看看关于编码的代码: [ ...
- UIScrollView,contentOffset,contentInsert的各自特点和区别?
• UIScrollView是一个能够滚动的视图控件,可以用来展示大量的内容,并且可以通过滚动查看所有的内容 设置UIScrollView的contentSize属性,告诉UIScrollView ...
- 【转】使用断言NSAssert()调试程序错误
NSAssert()只是一个宏,用于开发阶段调试程序中的Bug,通过为NSAssert()传递条件表达式来断定是否属于Bug,满足条件返回真值,程序继续运行,如果返回假值,则抛出异常,并切可以自定义异 ...
- vagrant WARNING: You are not using an encrypted connection
开发环境:vagrant 1.7 + centos 6(i386) + LAMP Drupal版本:7.53 在vagrant LAMP开发环境中,给Druapl安装模块时,显示WARNING: Yo ...
- C/S打包(图文)
最近几天接触到了关于C/S打包这块. 由于自己当时遇到了很多疑点,所以特意总结一下: 1.创建Project: 2.当创建Ok后会出现如下页面,左侧3个文件夹,第一个是放置程序文件(只需要放入.exe ...
- Java 专业人士必备的书籍和网站列表
对于 Java™ 语言开发人员来说,信息过量是一个真正的问题.每个新入行的程序员都要面临一个令人畏缩的挑战:要进入的行业是一个具有海量知识的行业.要了解的东西简直 太多了.对于有经验的老手来说,情况只 ...