`
wbj0110
  • 浏览: 1602707 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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

 

数据库操作:

插入数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
 $m = new Mongo("mongodb://127.0.0.1:27017/admin:admin");      //这里采用默认连接本机的27017端口,当然你也可以连接远程主机如                   192.168.0.4:27017,如果端口是27017,端口可以省略
$db = $m -> comedy;             // 选择comedy数据库,如果以前没该数据库会自动创建,也可以用$m->selectDB("comedy");
$collection = $db->collection;  //选择comedy里面的collection集合,相当于RDBMS里面的表,也-可以使用
$db->selectCollection("collection");
/*********添加一个元素**************/
$obj = array( "title" => "php1", "author" => "Bill Watterson" );
$collection->insert($obj);     //将$obj 添加到$collection 集合中
/*********添加另一个元素**************/
$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";
}
$m->close();          //断开MongoDB连接

  

结果:

带条件的查询

查询 titlehuaibei的字段

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" : []
 * }
 */ 

比较复杂的更新

更改authorjohn的名称

    "_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常用命令大全

    - **示例**: 输入 `help` 或者 `db.help()` 可以查看基本操作命令的帮助。 ##### 2. 切换/创建数据库 (Use/Create Database) - **命令格式**: `use yourDB` - **功能描述**: 如果指定的数据库不存在,则会自动创建...

    MongoDB常用命令批处理

    在管理和操作MongoDB时,批处理脚本是一个高效的方法,特别是对于执行重复性的任务,如安装、启动、停止和配置服务。以下是根据提供的文件名解析出的MongoDB相关知识点: 1. **安装MongoDB服务**: - `install.bat...

    mongodb常用命令.txt

    在centos7下安装部署mongodb分片+副本集群常用命令整理,内容包含,安装、配置、启动、访问shell终端等命令

    MongoDB常用操作命令大全

    MongoDB常用操作命令大全 数据库常用命令 Collection聚集集合 用户相关 聚集集合查询

    mongoDb 常用命令

    mongodb php distinct command --- mongoDb 常用命令

    MongoDB常用命令汇总

    包含对数据库、集合、文档的常用操作。

    MongoDB常用命令

    MongoDB 常用命令 MongoDB 是一个流行的 NoSQL 数据库,提供了丰富的命令来管理和维护数据库。在本文中,我们将介绍一些 MongoDB 常用的命令,包括集合命令、数据库命令和其他命令。 集合命令 1. `db.collection....

    Mongodb常用命令和java调用

    MongoDB 使用C++编写,支持多种操作系统,并提供了丰富的查询语言,类似于面向对象的查询,允许执行类似关系数据库的单表查询操作,还支持建立索引来提升查询效率。此外,MongoDB 支持动态模式,即schema-free,这...

    mongoDB常用命令1

    - `db.help()`:显示当前数据库可用的操作命令。 - `db.yourColl.help()`:针对特定集合提供帮助,例如`yourColl`集合。 - `db.youColl.find().help()`:关于`find`查询方法的帮助。 2. **切换/创建数据库** - ...

    mongodb常用命令.docx

    在日常使用中,MongoDB的这些命令对于数据的管理、查询和维护至关重要。通过灵活运用这些命令,开发者可以高效地处理和管理大规模的非结构化和半结构化数据,实现高并发和高性能的数据访问。由于其优秀的性能表现和...

    MongoDB常用的操作命令.txt

    ### MongoDB常用操作命令详解 #### 一、启动与配置MongoDB服务 在开始介绍具体的数据库操作之前,我们先了解如何启动和配置MongoDB服务。以下是一些常用的命令: 1. **启动MongoDB服务(默认数据目录)** ```...

    MongoDB常用命令手册.zip

    本手册涵盖了MongoDB的基础操作,旨在帮助初学者快速掌握其核心命令,以下是15条常用命令的详细说明: 1. **启动MongoDB服务**:在命令行中输入`mongod`启动MongoDB服务器,通常需要指定数据存储目录,如`mongod --...

    mongodb 操作命令(全)

    以下是一些主要的MongoDB操作命令的详细解释: 1. **数据库相关操作**: - `use &lt;database&gt;`:切换当前工作数据库。例如,`use myDatabase` 将会切换到名为myDatabase的数据库。 - `db`:显示当前工作数据库。 -...

    MongoDB数据库常用操作命令8.pdf

    本文将深入探讨在MongoDB中常见的数据库操作命令,这些命令对于理解和操作MongoDB至关重要。 首先,让我们来看一下如何根据年龄对数据进行排序。在MongoDB中,可以使用`sort()`函数来对查询结果进行排序。例如,...

    MongoDB数据库常用命令.docx

    MongoDB 数据库常用命令大全 MongoDB 是 NoSQL 数据库系统中比较流行的数据库之一。它也是最接近关系型数据库的,一个数据库可以包含多个集合(Collection),类似于关系数据库中的表;而每个集合中可以存储一组由...

    MongoDB常用SQL操作

    以下是一些关于MongoDB常用SQL操作的关键知识点: 1. **数据模型**:MongoDB基于JSON(JavaScript Object Notation)格式的文档存储数据,这使得它能够存储复杂的数据结构,如嵌套对象和数组。 2. **连接MongoDB**...

    MongoDB常用SQL操作.pdf

    在MongoDB中,常用的操作语句可以分为数据定义语言(DDL)和数据操纵语言(DML)。 **DDL操作:** 1. 创建集合(表) - 语法:`db.createCollection("collectionName")` - 实例:创建一个名为`user2`的集合,...

    mongodb常用命令

    以下是一些MongoDB的常用命令及其详细解释: 1. **创建集合(Collection)**: - `db.createCollection("mycoll", {capped:true,size:100000})`: 这个命令用于创建一个名为`mycoll`的集合,并设置为上限为100000...

    mongodb安装文件安装步骤常用命令和案例.rar

    本教程将详细介绍MongoDB在Linux环境下的安装步骤,并提供常用命令及实际案例,帮助您快速掌握MongoDB的操作。 首先,让我们来看如何在Linux系统上安装MongoDB。安装过程通常包括以下几个步骤: 1. **下载MongoDB*...

    mongodb的常用命令

    以下是一些MongoDB的常用命令及其详细解释: 1. **停止数据库**: - 使用`control-c`:在终端中按下`control-c`可以中断当前运行的MongoDB进程。 - `use admin`:切换到`admin`数据库,这是一个特殊的角色,可以...

Global site tag (gtag.js) - Google Analytics