PHP连接MongoDB
1 | $connection = new Mongo(); |
选择数据库 和 集合
1 | // 选择数据库 |
添加数据
简单新增
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21/**
* $collection->insert() ) ^.^ --->
* insert($array[, $arr = array(
* 'safe' => false,
* 'fsync' => false,
* 'timeout' => 10000,
* )])
* @param array $array 添加数据信息
* @param $arr 额外参数信息( 可选 )
* $arr['safe'] boolean 是否安全写入(false)
* $arr['fsync'] boolean 是否强制插入到同步磁盘(false)
* $arr['timeout'] int 超时间( 毫秒 )
*/
// 简单新增 , 返回布尔值 bool(true)
$result = $collection->insert(array(
'username' => 'myCeshi',
'age' => 12,
'time' => time(),
'skills' => array('php', 'javascript', 'css', 'html'),
));向集合中安全插入数据,返回插入状态(数组)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 用于等待MongoDB完成操作,以便确定是否成功(当有大量记录插入时使用该参数会比较有用)
$result = $collection->insert(array(
'username' => 'liujx',
'age' => 22,
);, true);
/**
return array(
'connectionId' => int 10
'n' => int 0
'syncMillis' => int 0
'writtenTo' => null
'err' => null
'ok' => float 1
) ;
*/
更新数据
1 | /** |
修改更新
1
2
3
4
5
6
7
8
9
10
11
12// 修改一条
$result = $collection->update(
array(
'username' => 'myCeshi'
),
array(
'$set' => array(
'username' => 'myTitle',
'name' => 'xiaoTitle'
)
)
);替换更新
1
2
3
4
5
6
7
8
9
10// 替换一条
$result = $collection->update(
array(
'username' => 'myCeshi'
),
array(
'myname' => '123',
'title' => 'nonoe'
)
);批量更新
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15$update = array();
$result = $collection->update(
array(
'username' => 'myCeshi'
),
array(
'$set' => array(
'myname' => '123',
'title' => 'nonoe'
)
),
array(
'multiple' => true
)
);自动累加
1
2
3
4
5
6
7
8
9
10
11// age累加5( 修改一条 )
$result = $collection->update(
array(
'username' => 'myTitle'
),
array(
'$inc' => array(
'age' => 5
)
)
);
删除数据 remove()
删除指定数据
1
2
3$result = $collection->remove(array(
'username' => 'myTitle'
));清空集合
1
$collection->remove();
删除指定的MongoId
1
2$id = new MongoId('557016db90428ba817000012');
$result = $collection->remove(array('_id' => $id));
查询数据 find() 和 findOne()
- 查询数据数目 count()
1
2
3
4
5
6
7
8
9
10
11
12
13
14$num = $collection->count();
// 查询满足条件的数据
$num = $collection->count(array(
'username' => 'liujx'
));
// 查询满足条件数据条数
$num = $collection->count(array(
'age' => array(
'$gt' => 12,
'$lt' => 30
)
));
- $gt为大于
- $gte为大于等于
- $lt为小于
- $lte为小于等于
- $ne为不等于
- $exists不存在
findOne() 查询一条数据
1
2
3
4
5
6
7
8
9/**
* findOne() 查询一条数据
* @param array $criteria 查询条件数组
* @return array 返回数组( 没有数据返回 null )
*/
$data = $collection->findOne();
$data = $collection->findOne(array(
'username' => 'liujx'
));find() 查询数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/**
* find() 查询数据
* @param array $criteria 查询条件数组
* @return object 返回对象( 没有返回 null )
* 注意:
* 在我们做了find()操作,获得$cursor游标之后,这个游标还是动态的.
* 换句话说,在我find()之后,到我的游标循环完成这段时间,如果再有符合条件的记录被插入到collection,那么这些记录也会被$cursor 获得.
* 如果你想在获得$cursor之后的结果集不变化,需要这样做:
* $cursor = $collection->find();
* $cursor->snapshot();
*/
$data = $collection->find(); // 查询所有数据,返回对象
foreach ($data as $key => $value) {
// var_dump($value);
}
限制查询条数limit()
1
$data = $collection->find()->limit(5);
确定查询开始位置skip()
1
$data = $collection->find()->limit(10)->skip(5);
排序条件查询sort()
1
2$data = $collection->find()->limit(10)->sort(array('_id' => -1));
// $data = $data->snapshot() ; # 排序和snapshot();指定查询的列 fields() true 显示 false 不显示
1
2$data = $collection->find()->limit(10)->fields(array('_id' => false)); // _id 列不显示
// $data = $collection->find()->limit(10)->sort(array('_id' => -1 ))->fields(array('username'=> true)) ; # 只显示username(_id默认显示)
索引操作 ensureIndex()
1 | /** |
关闭连接 close()
1 | $connection->close(); |