转自: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. AsyncTask的介绍

    android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接 ...

  2. How to setup ELM327 Bluetooth WiFi for Android software Torque

    1.    Install OBDII 2.    Install Android Software Torque a)    Copy software to phone from CD b)   ...

  3. Precompile Prefix file(.pch文件)

    参考资料: http://blog.csdn.net/lwjok2007/article/details/46385595 http://www.tuicool.com/articles/beURbe ...

  4. codechef January Challenge 2014 Sereja and Graph

    题目链接:http://www.codechef.com/JAN14/problems/SEAGRP [题意] 给n个点,m条边的无向图,判断是否有一种删边方案使得每个点的度恰好为1. [分析] 从结 ...

  5. hdu 4117 GRE Words AC自动机DP

    题目:给出n个串,问最多能够选出多少个串,使得前面串是后面串的子串(按照输入顺序) 分析: 其实这题是这题SPOJ 7758. Growing Strings AC自动机DP的进阶版本,主题思想差不多 ...

  6. web前端开发学习指南(大群主推荐)

    http://www.ituring.com.cn/book/1140 http://www.ituring.com.cn/book/1361

  7. 学习Slim Framework for PHP v3 (七)--route middleware怎么被add进来的?

    上两篇中分析了route是怎么被加进来的,以及如何被匹配的.这篇说一下route middleware是如何被加进来的,即add进来的.index.php的代码如下: $app->get('/f ...

  8. XAML

    XAML定义 XAML是一种相对简单.通用的声明式编程语言,它适合于构建和初始化.NET对象. XAML仅仅是一种使用.NET API的方式,把它与HTML.可伸缩向量图形(SVG)或其他特定领域的格 ...

  9. Microsoft SQL2000 错误代码 (@@error)

    Microsoft SQL 2000 错误代码(@@error) 0 操作成功完成.  1 功能错误.  2 系统找不到指定的文件.  3 系统找不到指定的路径.  4 系统无法打开文件.  5 拒绝 ...

  10. 增强for循环用法___ArrayList数组实现使用下标最好,LinkedList使用增强型的(转载)

    总结: 1.For-Each循环的缺点:丢掉了索引信息. 当遍历集合或数组时,如果需要访问集合或数组的下标,那么最好使用旧式的方式来实现循环或遍历,而不要使用增强的for循环,因为它丢失了下标信息. ...