【转】使用PHP操作MongoDB

MongoDB与PHP的添加、修改、查询、删除

PHP 扩展mongon.mod.dll 下载http://cn.php.net/manual/en/mongo.installation.php#mongo.installation.windows
然后php.ini添加 extension=php_mongo.dll
最后phpinfo() 查找到

表标PHP已经自带了mongo功能,你就可以操作下面的代码(但是你必须有安装mongodb服务器)

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

<?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());//能打印出数据库数组,看看有几个数据库。
如图

上图说有一个数据库名字叫local,总大小1个字节,他是空的。看见ok表示运行成功。

?>

现在你可以使用$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);
?>

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

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

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

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

使用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

注意补充:mongodb数据类型控制的很严格,比如字符串的1 和整型的1 在查找时,只能匹配到对应的数据

源地址 http://fangdongqing.blog.51cto.com/3293821/603372

时间: 2024-08-28 20:41:18

【转】使用PHP操作MongoDB的相关文章

Ruby操作MongoDB(进阶)-CRUD操作

MongDB数据库的使用离不开CRUD操作.什么是CRUD,就是创建文档,读取文档信息,更新文档和删除文档. key-value键值对标记 在MongoDB的Ruby驱动中,Key_value键值多次出现.而且有时会出现语法上的巧合,这取决于在使用的Ruby版本中如何申明. 在文档创建步骤中,1.9及之后版本支持以下语法: document={name:"Tom",age:20}. 但是如果你使用的是2.2或者更高的版本,你可以用双引号将你的key包起来.如: document={&q

PHP操作MongoDB技术总结

<?php /** * PHP操作MongoDB学习笔记 */ //************************* //** 连接MongoDB数据库 **// //************************* //格式=>("mongodb://用户名:密码 @地址:端口/默认指定数据库",参数) $conn = new Mongo(); //可以简写为 //$conn=new Mongo(); #连接本地主机,默认端口. //$conn=new Mongo(&

node操作MongoDB数据库之插入

在上一篇中我们介绍了MongoDB的安装与配置,接下来的我们来看看在node中怎样操作MongoDB数据库. 在操作数据库之前,首先应该像关系型数据库一样建个数据库把... 启动数据库 利用命令提示符: 1.在创建数据库之前,我们应该启动数据库服务器 mongod --dbpath d:\MongoDB\data 注意:不要关闭这个数据库服务器...不然数据库就被关闭了 2.使用如下语句创建一个数据库 use mydb 这样mongodb会帮助我们自动创建他们,当然这个时候数据库还是空的. 3.

学习MongoDB--(11):应用举例(利用java操作MongoDB)

原文地址:http://blog.csdn.net/drifterj/article/details/7948090 目录地址:http://blog.csdn.net/DrifterJ/article/category/1191327/2 前面我们都是通过shell来操作存取MongoDB的数据,shell中使用的语言就是javascript.我们这次说一下如何通过Java来访问操作MongoDB数据库的. Java驱动程序是MongoDB最早的驱动,已用于生产环境很长时间,十分稳定.可以到M

【转】PHP操作MongoDB GridFS 存储文件

PHP操作MongoDB GridFS 存储文件,如图片文件 GridFS是MongoDB的一个内置功能,它提供一组文件操作的API以利用MongoDB存储文件,GridFS的基本原理是将文件保存在两个Collection中,一个保存文件索引,一个保存文件内容,文件内容按一定大小分成若干块,每一块存在一个Document中,这种方法不仅提供了文件存储,还提供了对文件相关的一些附加属性(比如MD5值,文件名等等)的存储.

PHP操作Mongodb之增删改查篇

之前,我讲解过PHP中mongodb扩展的安装,及启动,链接操作[忘记了?去看看吧!PHP操作Mongodb之一].本文主要就是讲在PHP中Mongodb的增加,查询,修改及删除数据的操作. 1.增加数据 语法格式: $db->insert($array);  //参数表示需要插入的数据 例如:我们插入一个id为1,名称为PHP,年龄为25的数据.代码如下: <?php //连接数据库 $connnect = new Mongo("mongodb://127.0.0.1:27017&

java操作mongoDB实现CURD

java操作mongoDB mongoDB作为一个牛气哄哄的nosql内存数据库,的确有很多优点,对于大数据量.高并发.弱事务的互联网应用,MongoDB可以应对自如.接触到mongoDB 参考了下api实现了增删改查.mongoDB 是面向对象设计,不用写sql语句 直接操作api 方法 就可以实现,这会儿数据库语句写不好的娃娃们有福了.直接贴码: DataTest.java package com.zk.db; import java.net.UnknownHostException; im

32位下操作mongodb心得

本文出处:http://blog.csdn.net/chaijunkun/article/details/7236911,转载请注明. 随着互联网的变革,互联网的内容生成方式也逐渐地从网站生成转为用户生成.这种变化不仅仅是内容生成对象的转变那样简单的问题,随之带来的就是互联网数据的大爆炸(big bang).社交网络的兴起也给互联网相关技术提出了挑战. MongoDB应用广泛,作为一款无关系型数据库产品,它具有伸缩性.高性能.开源.模式开放和基于文档等特性.因此很值得研究. 通过本文,我将与你分

php操作mongodb中的ISODate格式日期

mongodb 中数据记录的日期格式为"dateCreated" : ISODate("2011-12-20T07:22:50.836Z")经过翻阅php官网中的mongodb部分得知,要操作mongodb中的日期须要使用以下关键语句:$start = new MongoDate(strtotime('-1 day'));$end = new MongoDate(time());$resultObject =$db->user->find(array(&

C# 操作MongoDb 错误Element &#39;_v&#39; does not match any field or property of class XXX

错误信息:Element '_v' does not match any field or property of class XXX. 这是由于mongoDb 中的collection包含了一些class中没有的字段解决方法:给class的定义加上 [BsonIgnoreExtraElements] C# 操作MongoDb 错误Element '_v' does not match any field or property of class XXX