Mongodb的常用操作

参看手册,php官方的http://us2.php.net/manual/en/mongo.manual.php

也可以参看mongodb官方的教程

数据库连接

⑴默认格式

$m = new Mongo();

//这里采用默认连接本机的27017端口,当然你也可以连接远程主机如                   192.168.0.4:27017,如果端口是27017,端口可以省略

⑵标准连接

$m = new Mongo("mongodb://${username}:${password}@localhost");

实例:$m = new Mongo("mongodb://127.0.0.1:27017/admin:admin");

数据库的用户名和密码都是admin

数据库操作:

插入数据:

  

结果:

带条件的查询

查询 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为大写

更详细的转换参考http://us2.php.net/manual/en/mongo.sqltomongo.php

注意事项

查询时,每个Object插入时都会自动生成一个独特的_id,它相当于RDBMS中的主键,用于查询时非常方便 (_id每一都不同,很像自动增加的id)
如:

1 <?php 
2  
3 $person = array("name" => "joe"); 
4  
5 $people->insert($person); 
6  
$joe = $people->findOne(array("_id" => $person['_id'])); 
8  
9 ?> 

  

数据更改

添加一个新字段

/** 原字段:
 * {"username" : "...", "password" : "...", "email" : "..."}
 */
$coll->update(array("username" => "joe"), array('$set' => array("twitter" => "@joe4153")));

/** 操作后的字段:
 * {"username" : "joe", "password" : "...", "email" : "...", "twitter" : "@joe4153"}
 */

更改字段值

/** 原的数据
 * {"username" : "...", "password" : "...", "email" : "..."}
 */
$coll->update(array("username" => "joe"), array("userId" => 12345, "info" => array(
    "name" => "joe", "twitter" => "@joe4153", "email" => "..."), "likes" => array()));

/** 操作后的数据:
 * {
 *     "userId" : 12345, 
 *     "info" : {
 *         "name" : "joe", 
 *         "twitter" : "@joe4153", 
 *         "email" : "..."
 *     },
 *     "likes" : []
 * }
 */

比较复杂的更新

更改author为john的名称

{

"_id" : ObjectId("4b06c282edb87a281e09dad9"),

"content" : "this is a blog post.",

"comments" :

[

{

"author" : "Mike",

"comment" : "I think that blah blah blah...",

},

{

"author" : "John",

"comment" : "I disagree."

}

]

}

操作:<?php

$blog->update(
    array("comments.author" => "John"), 
    array('$set' => array('comments.$.author' => "Jim")));

?>

删除一个数据库

$m -> dropDB("comedy");

列出所有可用数据库

$m->listDBs();   //无返回值

转载一部分mongodb常用的数据库方法

MongoDB中有用的函数:

创建一个MongoDB对象

http://us.php.net/manual/en/mongodb.construct.php

$mo = new Mongo();

$db = new MongoDB($mo,’dbname’);//通过创建方式获得一个MongoDB对象

删除当前DB

http://us.php.net/manual/en/mongodb.drop.php

$db = $mo->dbname;

$db->drop();

获得当前数据库名

http://us.php.net/manual/en/mongodb.–tostring.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对象):

http://us.php.net/manual/en/mongocollection.insert.php

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对象):

http://us.php.net/manual/en/mongocollection.remove.php

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对象):

http://us.php.net/manual/en/mongocollection.update.php

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类):

http://us.php.net/manual/en/mongocollection.findone.php

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类):

http://us.php.net/manual/en/mongocollection.find.php

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类):

http://us.php.net/manual/en/class.mongocursor.php

循环或的结果记录:

$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);

**************************************************************************

Mongodb的介绍安装常用操作都已经介绍完毕,其实感觉他就是mysql,现在你就可以进入你的开发之旅了,推荐使用这个作为后台日志系统数据库。

Mongodb for PHP教程之数据操作的更多相关文章

  1. mongoDB数据库文件路径和数据操作

    1.查看MongoDB在电脑上的安装路径 which mongod 2.默认mongodb 数据文件是放到根目录 data/db 文件夹下,如果没有这个文件,需要自行创建 mkdir -p /data ...

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

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

  3. 笔记-mongodb数据操作

    笔记-mongodb数据操作 1.      数据操作 1.1.    插入 db.COLLECTION_NAME.insert(document) 案例: db.inventory.insertOn ...

  4. mongodb学习(二)——基本的数据操作

    数据操作(重点) 数据库的核心--CRUD,增加和删除较为简单,查询和修改较复杂 查询 关系运算符 $gt 大于 $lt 小于 $gte 大于等于 $lte 小于等于 $eq | (key: valu ...

  5. MongoDb 快速入门教程

    文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...

  6. Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程

    Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...

  7. 【MongoDB详细使用教程】二、MongoDB基本操作

    目录 数据类型 数据库操作 集合操作 数据操作 增 查 改 修改整行 修改指定字段的值 删 数据类型 MongoDB常见类型 说明 Object ID 文档ID String 字符串,最常用,必须是有 ...

  8. 【MongoDB详细使用教程】五、MongoDB的数据库管理

    目录 1.数据库安全 1.1.创建管理员账号和密码 1.2.设置服务状态为需要验证用户 1.3.创建用户账户和密码 1.4.忘记密码/修改密码 2.主从服务器 2.1.创建服务器目录,用于分别存放主从 ...

  9. 【MongoDB详细使用教程】三、高级查询

    目录 1.使用比较运算符查询 2.使用关键字查询 2.1.in/not in 关键字 2.2.size 关键字 2.3.exists 关键字 2.4.or 关键字 3.模糊查询 4.查询结果排序 5. ...

随机推荐

  1. iOS开发基础知识

    1:App跳转至系统Settings 跳转在IOS8以上跟以下是有区别的,如果是IOS8以上可以如下设置: NSURL *url = [NSURL URLWithString:UIApplicatio ...

  2. python 一些函数和类用法记录

    这一篇主要用来记录在学习过程中遇到的一些觉得有意思的函数或者类的用法,有一些用法感觉很炫酷. 1.collections.defaultdict from collections import def ...

  3. [LUOGU] P1962 斐波那契数列

    求斐波那契第n项. [f(n-1) f(n)] * [0,1] = [f(n) f(n+1)] [1,1] 由此原理,根据矩阵乘法的结合律,用快速幂算出中间那个矩阵的n次方即可. 快速幂本质和普通快速 ...

  4. mysql 报错:ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA

    解决办法:设置临时环境变量 ;  

  5. Openstack实验笔记

    Openstack实验笔记 制作人:全心全意 Openstack:提供可靠的云部署方案及良好的扩展性 Openstack简单的说就是云操作系统,或者说是云管理平台,自身并不提供云服务,只是提供部署和管 ...

  6. LeetCode(67) Add Binary

    题目 Given two binary strings, return their sum (also a binary string). For example, a = "11" ...

  7. 杭电 2120 Ice_cream's world I (并查集求环数)

    Description ice_cream's world is a rich country, it has many fertile lands. Today, the queen of ice_ ...

  8. vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类

    vs2010 C# 如何将类做成DLL 再从另一个项目中使用这个类 2011-10-20 12:00 486人阅读 评论(0) 收藏 举报 一.将类做成DLL 方法一: 你可以通过在命令行下用命令将以 ...

  9. 国内UED收录

    腾讯 腾讯CDC http://cdc.tencent.com/ CDC(Customer Research & User Experience Design Center)腾讯用户研究与体验 ...

  10. CodeForces 606C--Sorting Railway Cars,思路题~~~

    C - Sorting Railway Cars   Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d &am ...