重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
PHP操作MongoDB数据库的简单示例。
成都创新互联公司主要从事网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务历下,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
Mongodb的常用操作
参看手册,php官方的
也可以参看mongodb官方的教程。
一, Mognodb数据库连接
1)、默认格式
复制代码 代码示例:
$m = new Mongo();
//这里采用默认连接本机的27017端口,当然也可以连接远程主机如 192.168.0.4:27017,如果端口是27017,端口可以省略。
2)、标准连接
$m = new Mongo(“mongodb://${username}:${password}@localhost”);
实例:
复制代码 代码示例:
$m = new Mongo(“mongodb://127.0.0.1:27017/admin:admin”);
数据库的用户名和密码都是admin
数据库操作:
1)、插入数据:
复制代码 代码示例:
?php
//这里采用默认连接本机的27017端口,当然你也可以连接远程主机如192.168.0.4:27017
//如果端口是27017,端口可以省略
$m = new Mongo("mongodb://127.0.0.1:27017/admin:admin");
//选择comedy数据库,如果以前没该数据库会自动创建,也可以用$m-selectDB("comedy");
$db = $m-comedy;
//选择comedy里面的collection集合,相当于RDBMS里面的表,也可以使用
$collection = $db-collection;
$db-selectCollection("collection");
/*********添加一个元素**************/
$obj = array("title" = "php1", "author" = "Bill Watterson");
//将$obj 添加到$collection 集合中
$collection-insert($obj);
/*********添加另一个元素**************/
$obj = array("title" = "huaibei", "online" = true);
$collection-insert($obj);
//$query = array("title" = "huaibei");
$query = array( "_id" = $obj['_id'] );
$cursor = $collection-find($query);
//遍历所有集合中的文档
foreach ($cursor as $obj) {
echo $obj["title"] . "\n";
echo $obj["_id"] . "\n";
}
//断开MongoDB连接
$m-close();
2)、带条件的查询
查询 title为huaibei的字段
1 $query = array( ”title” = ”huaibei” );
2 $cursor = $collection-find( $query ); // 在$collectio集合中查找满足$query的文档
常用的SQL转化为mongodb的条件
复制代码 代码示例:
mysql: id = 123
mongo: array(‘id’=123)
mysql: name link ’%bar%’
mongo: array(‘name’ = new MongoRegex(‘/.*bar.*/i’))
mysql: where id 10
mongo: array(‘id’ = array(‘$gt’ = 10))
mysql: where id = 10
mongo: array(‘id’ = array(‘$gte’ = 10))
mysql: where id 10
mongo: array(‘id’ = array(‘$lt’ = 10))
mysql: where id = 10
mongo: array(‘id’ = array(‘$lte’ = 10))
mysql: where id 1 and id 10
mongo: array(‘id’ = array(‘$gt’ = 1,’$lt’ = 10))
mysql: where id 10
mongo: array(‘id’ = array(‘$ne’ = 10))
mysql: where id in(123)
mongo: array(‘id’ = array(‘$in’ = array(1,2,3)))
mysql: where id not in(123)
mongo: array(‘id’ = array(‘$nin’ = array(1,2,3)))
mysql: where id = 2 or id = 9
mongo: array(‘id’ = array(‘$or’ = array(array(‘id’=2),array(‘id’=9))))
mysql: order by name asc
mongo: array(‘sort’=array(‘name’=1))
mysql: order by name desc
mongo: array(‘sort’=array(‘name’=-1))
mysql: limit 0,2
mongo: array(‘limit’=array(‘offset’=0,’rows’=2))
mysql: select name,email
mongo: array(‘name’,'email’)
mysql: select count(name)
mongo: array(‘COUNT’) //注意:COUNT为大写
更详细的转换参考
注意事项:
查询时,每个Object插入时都会自动生成一个独特的_id,它相当于RDBMS中的主键,用于查询时非常方便 (_id每一都不同,很像自动增加的id)
例如:
复制代码 代码示例:
?php
$param = array("name" = "joe");
$collection-insert($param);
$joe = $collection-findOne(array("_id" = $param['_id']));
print_R($joe);
$m-close();
返回结果:Array ( [_id] = MongoId Object ( [$id] = 4fd30e21870da83416000002 ) [name] = joe )
更改字段值:
复制代码 代码示例:
?php
$sign = array("title" = 'php1');
$param = array("title" = 'php1','author'='test');
$joe = $collection-update($sign, $param);
删除一个数据库:
复制代码 代码示例:
$m - dropDB(“comedy”);
列出所有可用数据库:
复制代码 代码示例:
$m-listDBs(); //无返回值
附,mongodb常用的数据库方法
MongoDB中有用的函数:
创建一个MongoDB对象
复制代码 代码示例:
?php
$mo = new Mongo();
$db = new MongoDB($mo,’dbname’);//通过创建方式获得一个MongoDB对象
删除当前DB
复制代码 代码示例:
?php
$db = $mo-dbname;
$db-drop();
获得当前数据库名
复制代码 代码示例:
?php
$db = $mo-dbname;
$db-_tostring();
选择想要的collection:
复制代码 代码示例:
A:
$mo = new Mongo();
$coll = $mo-dbname-collname;//获得一个collection对象
B:
$db = $mo-selectDB(’dbname’);
$coll = $db-collname;
C:
$db = $mo-dbname;
$coll = $db-collname;
D:
$db = $mo-dbname;
$coll = $db-selectCollectoin(’collname’);//获得一个collection对象
插入数据(MongoCollection对象):
MongoCollection::insert(array $a,array $options)
array $a 要插入的数组
array $options 选项
safe 是否返回操作结果信息
fsync 是否直接插入到物理硬盘
例子:
复制代码 代码示例:
$coll = $mo-db-foo;
$a = array(’a’=’b’);
$options = array(’safe’=true);
$rs =$coll-insert($a,$options);
$rs为一个array型的数组,包含操作信息
删除数据库中的记录(MongoCollection对象):
MongoCollection::remove(array $criteria,array $options)
array $criteria 条件
array $options 选项
safe 是否返回操作结果
fsync 是否是直接影响到物理硬盘
justOne 是否只影响一条记录
例子:
复制代码 代码示例:
$coll = $mo-db-coll;
$c = array(’a’=1,’s’=array(’$lt’=100));
$options = array(’safe’=true);
$rs = $coll-remove($c,$options);
$rs为一个array型的数组,包含操作信息
更新数据库中的记录(MongoCollection对象):
MongoCollection::update(array $criceria,array $newobj,array $options)
array $criteria 条件
array $newobj 要更新的内容
array $options 选项
safe 是否返回操作结果
fsync 是否是直接影响到物理硬盘
upsert 是否没有匹配数据就添加一条新的
multiple 是否影响所有符合条件的记录,默认只影响一条
例子:
复制代码 代码示例:
$coll = $mo-db-coll;
$c = array(’a’=1,’s’=array(’$lt’=100));
$newobj = array(’e’=’f’,’x’=’y’);
$options = array(’safe’=true,’multiple’=true);
$rs = $coll-remove($c,$newobj,$options);
$rs为一个array型的数组,包含操作信息
查询collection获得单条记录(MongoCollection类):
array MongoCollection::findOne(array $query,array $fields)
array $query 条件
array $fields 要获得的字段
例子:
复制代码 代码示例:
$coll = $mo-db-coll;
$query = array(’s’=array(’$lt’=100));
$fields = array(’a’=true,’b’=true);
$rs = $coll-findOne($query,$fields);
如果有结果就返回一个array,如果没有结果就返回NULL
查询collection获得多条记录(MongoCollection类):
MongoCursor MongoCollection::find(array $query,array $fields)
array $query 条件
array $fields 要获得的字段
例子:
复制代码 代码示例:
$coll = $mo-db-coll;
$query = array(’s’=array(’$lt’=100));
$fields = array(’a’=true,’b’=true);
$cursor = $coll-find($query,$fields);
//排序
$cursor-sort(array(‘字段’=-1));(-1倒序,1正序)
//跳过部分记录
$cursor-skip(100);跳过100行
//只显示部分记录
$cursor-limit(100);只显示100行
返回一个游标记录对象MongoCursor。
针对游标对象MongoCursor的操作(MongoCursor类):
循环或结果记录:
复制代码 代码示例:
$cursor = $coll-find($query,$fields);
while($cursor-hasNext()){
$r = $cursor-getNext();
var_dump($r);
}
或者
$cursor = $coll-find($query,$fields);
foreache($cursor as $k=$v){
var_dump($v);
}
或者
$cursor = $coll-find($query,$fields);
$array= iterator_to_array($cursor);
是否有报错?
?
echo $b_order."br";
echo $id."br";
$query="update book set b_order='$b_order',publisher='$publisher' where book_id=$id";
echo $query."br";
?
调试输出看一下值
MySQL Update Set 更新数据
UPDATE 更新
UPDATE SET 语法用于修改更新数据表中的数据。
语法:
UPDATE tb_name SET column1 = new_value1,column2 = new_value2,… WHERE definition
该语法将数据表中符合 WHERE 条件的记录中的 column1 的值更新为 new_value1,column2 的值更新为 new_value2 ,以此类推。如果省略 WHERE 条件,则会将表中所有记录的 column 值进行更新。
例子:
?php
$conn = @mysql_connect("localhost","root","root123");
if (!$conn){
die("连接数据库失败:" . mysql_error());
}
mysql_select_db("test", $conn);
mysql_query("set names 'gbk'");
$sql = "UPDATE user SET email = 'xiaoming@163.com' WHERE username = '小明'";
if(mysql_query($sql,$conn)){
echo "更新数据成功!";
} else {
echo "更新数据失败:".mysql_error();
}
?
更新前数据:
uid username password email regdate
1 admin b7e591c246d010bb2ccd77d52490c85e admin@5idev.com 1277992339
2 小明 a193686a53e4de85ee3f2ff0576adf01 xiao@163.com 1278063917
3 Jack 0193686a35e4de85ee3f2ff0567adf49 jack@gmail.com 1278061380
4 小王 e10adc3949ba59abbe56e057f20f883e 12345@163.com 1289632955
例子将 user 表中 username 为 小明 的 email 修改为 xiaoming@163.com 。
更新后数据:
uid username password email regdate
1 admin b7e591c246d010bb2ccd77d52490c85e admin@5idev.com 1277992339
2 小明 a193686a53e4de85ee3f2ff0576adf01 xiaoming@163.com 1278063917
3 Jack 0193686a35e4de85ee3f2ff0567adf49 jack@gmail.com 1278061380
4 小王 e10adc3949ba59abbe56e057f20f883e 12345@163.com 1289632955
UPDATE 表达式
UPDATE 语法允许 SET 后面跟表达式。
例子 1 :
UPDATE article SET pv = pv+1 WHERE id = 123
该例子让 id 为 123 的文章在被点击阅读的时候点击量加 1 。
例子 2 :
UPDATE persondata SET age = age*2, age = age+1
该例子 SET 后面跟了两个表达式:age = age*2(年龄加倍),age = age+1(再加 1 )。这种多个表达式的情况,是按照从左往右顺序执行的。