PHP操作MongoDB实例

PHPmongodb扩展安装

1

2

3

4

5

6

# https://github.com/mongodb/mongo-php-driver/archive/master.zip

# unzip master.zip

# /usr/local/php/bin/phpize

# ./config --with-php-config=/usr/local/php/bin/php-config

# make

# make install

将mongo.so添加到php.ini

1

2

# vim /usr/local/php/etc/php.ini

extension

=

mongo
.
so

重启php-fpm生效

1

# /usr/local/php/sbin/php-fpm -y /usr/local/php/etc/php-fpm.comf

php的mongodb扩展,提供了4个核心类接口
1). 针对mongodb的连接操作类MongoClient
http://www.php.net/manual/zh/class.mongoclient.php
2). 针对mongodb的数据库操作类MongoDB
http://www.php.net/manual/zh/class.mongodb.php
3). 针对mongodb的集合操作类MongoCollection
http://www.php.net/manual/zh/class.mongocollection.php
4). 针对mongodb的查询结果集(游标)操作类MongoCursor
http://www.php.net/manual/zh/class.mongocursor.php

连接MongoDB
mongodb驱动连接格式为:mongodb://[username:[email protected]]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]],如:
mongodb://localhost
mongodb://user:password@localhost
mongodb://user:[email protected]/database
mongodb://example1.com:27017,example2.com:27017
mongodb://localhost,localhost:27018,localhost:27019
mongodb://host1,host2,host3/?slaveOk=true
mongodb://localhost/?safe=true
mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000
mongodb://rs1.example.com:27017,rs2.example.com:27017/?replicaSet=myReplSetName
mongodb://localhost/?journal=true&w=majority&wTimeoutMS=20000
具体含义参见《ttlsa教程系列之mongodb—(一)mongodb介绍》 http://www.ttlsa.com/html/1594.html

PHP连接实例:

1

2

3

4

5

<
?
php

$
m

=

new

MongoClient
(
"mongodb://localhost/?journal=true&w=majority&wTimeoutMS=20000"
)
;

$
m

=

new

MongoClient
(
"mongodb://rs1.example.com:27017,rs2.example.com:27017/?replicaSet=myReplSetName"
)
)
;

$
m

=

new

MongoClient
(
"mongodb://rs1.example.com:27017"
,

array
(
"replicaSet"

=
>

"myReplSetName"
)
)
;

$
m

=

new

MongoClient
(
"mongodb://rs1.example.com:27017,rs2.example.com:27017"
,

array
(
"replicaSet"

=
>

"myReplSetName"
,
"wTimeoutMS"
=
>
20000
)
)
;

在连接到复制集时,用它来判断哪台是primary。返回主机名称、端口号、健康程度、状态(1-primary,2-secondary,0-other)、ping耗时、前一次ping的时间戳。

1

$
m
->
getHosts
(
)
;

列出所有数据库,返回数据库名称、大小、是否为空以及总大小、ok状态。

1

$
m
->
listDBs
(
)
;

选择数据库,返回数据库对象

1

2

3

$
db

=

$
m
->
db_name
;

$
db

=

$
m
->
selectDB
(
db_name
)
;

选择表(集合),返回文档集合对象

1

2

3

4

5

$
col

=

$
m
->
selectCollection
(
db_name
,

col_name
)
;

$
col

=

$
m
->
selectDB
(
db_name
)
->
selectCollection
(
col_name
)
;

$
col

=

$
m
->
db_name
->
col_name
;

列出所有集合,返回集合对象

1

$
col_list

=

$
db
->
listCollections
(
)
;

获取当前选择的数据库名,返回数据库名

1

$
db_name

=

$
db
->
__toString
(
)
;

删除当前数据库

1

$
db
->
drop
(
)
;

设置slaveok状态(可读状态设置)

1

$
db
->
setSlaveOkay
(
true
/
false
)
;

获取slaveok当前状态

1

$
db
->
getSlaveOkay
(
)
;

插入数据MongoCollection::insert(array $a,array $options)
array $a 要插入的数组
array $options 选项:safe 是否返回操作结果信息;fsync 是否直接插入到物理硬盘;w 写入份数;timeout 超时时间

1

2

3

4

5

<
?
php

$
coll

=

$
m
->
db_name
->
col_name
;

$
a

=

array
(’
website
‘=>’www.ttlsa.com‘
)
;

$
options

=

array
(’
safe’
=
>
true
)
;

$
rs

=

$
coll
->
insert
(
$
a
,
$
options
)
;

$
rs为数组,包含操作信息

删除集合中的记录MongoCollection::remove(array $criteria,array $options)
array $criteria 条件
array $options 选项: safe 是否返回操作结果; fsync 是否是直接影响到物理硬盘; justOne 是否只影响一条记录

1

2

3

4

5

<
?
php

$
coll

=

$
m
->
db_name
->
col_name
;

$
c

=

array
(’
website
‘=>‘
www
.
ttlsa
.
com‘
,’
hit’
=
>
array
(’
$
lt’
=
>
100
)
)
;

$
options

=

array
(’
safe’
=
>
true
)
;

$
rs

=

$
coll
->
remove
(
$
c
,
$
options
)
;

$
rs为数组,包含操作信息

更新集合中的记录MongoCollection::update(array $criceria,array $newobj,array $options)
array $criteria 条件
array $newobj 要更新的内容
array $options 选项: safe 是否返回操作结果; fsync 是否是直接影响到物理硬盘; upsert 是否没有匹配数据就添加一条新的; multiple 是否影响所有符合条件的记录,默认只影响一条

1

2

3

4

5

6

<
?
php

$
coll

=

$
m
->
db_name
->
coll_name
;

$
c

=

array
(’
uid
‘=>888,’login_count’=>array(’$lt’=>100));

$newobj = array(’vip‘
=
>’
1
‘,’score‘
=
>’
10000‘
)
;

$
options

=

array
(’
safe’
=
>
true
,’
multiple’
=
>
true
)
;

$
rs

=

$
coll
->
remove
(
$
c
,
$
newobj
,
$
options
)
;

$
rs为数组,包含操作信息

查询集合获取单条记录MongoCollection::findOne(array $query,array $fields)
array $query 条件
array $fields 要获得的字段

1

2

3

4

5

<
?
php

$
coll

=

$
m
->
db_name
->
col_name
;

$
query

=

array
(’
score’
=
>
array
(’
$
lt’
=
>
10000
)
)
;

$
fields

=

array
(’
uid
‘=>true,’vip‘
=
>
true
)
;

$
rs

=

$
coll
->
findOne
(
$
query
,
$
fields
)
;
返回
array或
null

获取多条记录MongoCollection::find(array $query,array $fields)
array $query 条件
array $fields 要获得的字段

1

2

3

4

5

6

<
?
php

$
coll

=

$
m
->
db_name
->
col_name
;

$
query

=

array
(’
s’
=
>
array
(’
$
lt’
=
>
100
)
)
;

$
query

=

array
(’
score’
=
>
array
(’
$
lt’
=
>
10000
)
)
;

$
fields

=

array
(’
uid
‘=>true,’vip‘
=
>
true
)
;

$
rs

=

$
coll
->
find
(
$
query
,
$
fields
)
;
返回游标对象
MongoCursor。

获取查询结果数量

1

2

$
cursor

=

$
coll
->
find
(
)
;

$
num

=

$
cursor
->
count
(
)
;

选定列MongoCursor::fields

1

2

3

$
cursor
->
fields
(
array
(
column_name1

=
>

true
,

column_name2

=
>

false
)
)
;

$
cursor

=

$
coll
->
find
(
)
->
fields
(
array
(
column_name1

=
>

true
,

column_name2

=
>

false
)
)
;

分页

1

$
cursor

=

$
coll
->
find
(
)
->
limit
(
30
)
->
skip
(
0
)
;

排序MongoCursor::sort

1

$
cursor

=

$
coll
->
find
(
)
->
sort
(
array
(
column_name1

=
>

-
1
,

column_name2

=
>

1
)
)
;

取查询结果

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

$
cursor

=

$
coll
->
find
(
$
query
,
$
fields
)
;

while
(
$
cursor
->
hasNext
(
)
)
{

$
r

=

$
cursor
->
getNext
(
)
;

var_dump
(
$
r
)
;

}

或者

$
cursor

=

$
coll
->
find
(
$
query
,
$
fields
)
;

$
r

=

array
(
)
;

foreache
(
$
cursor
as

$
k
=
>
$
v
)
{

var_dump
(
$
v
)
;

$
r
[
]

=

$
v
;

}

或者

$
cursor

=

$
coll
->
find
(
$
query
,
$
fields
)
;

$
array
=

iterator_to_array
(
$
cursor
)
;

快照MongoCursor::snapshot
保证一致性。在做find()操作时,获得$cursor之后,这个游标是动态的,在循环取结果过程中,如果有其他连接来更改符合条件的记录时,这个$cursor也会跟着变化的。$cursor->snapshot();之后,再插入或删除符合条件的记录时,获取的结果集将不再变化。如果是小于1M的结果集会自动被当作snapshot来处理。
如果要获取$cursor之后不变的结果需要这么做:

1

2

$
cursor

=

$
coll
->
find
(
$
query
,
$
fields
)
;

$
cursor
->
snapshot
(
)
;

snapshot对findOne无效。

时间: 2024-08-12 06:27:37

PHP操作MongoDB实例的相关文章

java操作mongoDB实现CURD

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

Ruby操作MongoDB(进阶八)-聚合操作Aggregation

上篇博文讲述了排序规则collations的操作和设置方式.顺带介绍了一部分聚合aggregation的设置方式.本文继续介绍聚合操作. 聚合框架的操作处理完数据记录后在返回计算结果.集合操作将来源于多个文档的值归类到一起,这样就可疑在被归类的数据上进行多种操作,然后返回一个单独的结果 1 聚合管道 聚合管道是用于数据聚合的一个框架,是以数据处理管道概念为原型.将文档输入一个多级管道后,可疑将文档转换为聚合的结果.下面以restaurants作为数据集,通过将餐馆类归类,我们就可以使用聚合管道在

C# 操作mongodb 分组

c#操作mongodb的分组的简单例子: 1.首先要下载c#对应的mongodb驱动,官方下载地址:https://github.com/mongodb/mongo-csharp-driver/releases,目前版本是2.3.0 然后引用相应的命名空间, using MongoDB.Bson; using MongoDB.Driver; using MongoDB.Driver.Core; 2.实例代码: /// <summary> /// 数据集合,类似关系型数据库中的表 /// <

mongoose - 让node.js高效操作mongodb

Mongoose库简而言之就是在node环境中操作MongoDB数据库的一种便捷的封装,一种对象模型工具,类似ORM,Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用. 当然要使用的话,必须要先安装好环境Node.js与MongoDB => MongoDB安装 MongoDB是目前最流行的noSQL数据库之一,它是专为node.js而开发的,理解下与我们常用的RDBMS关系型数据库的区别就可以基本使用了 MongoDB中有三个基本的概念区别于RDBMS 数据库:数

Ruby操作MongoDB(进阶七)-排序规则Collations

本篇博文从三个方面进行排序规则Collations的讲解.其中包括概览,使用方式和支持排序的操作.首先我们对排序规则进行一个概览性的介绍 排序规则概览 排序规则为特定语言习惯中的字符串比较提供一套规则,例如,在加拿大法语中,给定词汇的最后一个重音节决定了其排序顺序. 考虑下述法语词汇: cote < coté < cte < cté 使用加拿大法语排序规则,得到如下排序结果 cote < cte < coté < cté 如果没有指定排序规则,MongoDB使用简单的二

Python 操作 mongodb 数据库

原文地址:https://serholiu.com/python-mongodb 这几天在学习Python Web开发,于 是做准备做一个博客来练练手,当然,只是练手的,博客界有WordPress这样的好玩意儿,何必还自己造车呢?决定使用Tornado这个框架,然后数 据库方面决定顺便熟悉一下MongoDB这样的非关系型数据库.Python让我觉得轻松,再和MongoDB搭配上,那感觉真是好. 下面就谈谈Python操作MongoDB的一些基本用法,先介绍一下MongoDB,这是现在风头正劲的N

PHP操作MongoDB数据库

一.MongoDB简介 MongoDB (名称来自"humongous") 是一个可扩展的.高性能.开源.模式自由.面向文档的数据库,集文档数据库.键值对存储和关系型数据库的优点于一身. 官方站点: https://www.mongodb.org MongoDB特点: ? 面向文档存储(类JSON数据模式简单而强大)? 动态查询? 全索引支持,扩展到内部对象和内嵌数组? 查询记录分析? 快速,就地更新? 高效存储二进制大对象 (比如照片和视频)? 复制和故障切换支持? Auto-Sha

Ruby操作MongoDB(进阶五)-数据库管理Administration

通过前面四章的学习,本章我们开始学习Ruby操作MongoDB数据库中的数据管理Administration 数据库相关 Ruby驱动为数据库对象执行命令,获取集合列表,和管理任务提供了多种多样的帮助. 1.1 获取集合列表List Collection 通过collections和collection_names两个指令可以获取集合列表和集合的名字.例如: client=Mongo::Client.new(['127.0.0.1:27017'],:database=>'film') datab

安装使用Mongoose配合Node.js操作MongoDB的基础教程【转载】

这篇文章主要介绍了安装使用Mongoose来让Node.js操作MongoDB的基础教程,前端js+后端node+js操作MongoDB正是所谓最流行的一种JavaScript全栈开发方案,需要的朋友可以参考下 安装mongoose 使用express准备一个TestMongoDB项目,命令序列如下: express TestMongoDB cd TestMongoDB npm install 执行完上面的命令后,使用下面的命令安装mongoose: npm install mongoose -