上一篇介绍了如何为PHP安装mongodb扩展并连接MongoDB数据库,接下来尝试使用PHP进行CURD操作。

插入

沿用上一篇创建的test.php文件,编辑内容如下并执行

1
2
3
4
5
6
7
8
<?php
require_once __DIR__ . "/vendor/autoload.php"; # 为了少写几行字 以后代码中此行省略
$collection = (new MongoDB\Client)->example->users; # 此行省略
$collection->insertOne([
'username' => 'admin',
'email' => 'admin@example.com',
'name' => 'Admin User',
]);

文件没报错的话就是插入成功了。嗯(一脸懵逼.jpg),啥也看不到怎么确定插进去了呢?那现在执行mongo进入MongoDB命令行交互界面验证一下。在验证之前,先了解一点,看下test.php文件的第二行的exampleusers分别表示什么。MongoDB支持在插入数据的时候自动创建数据库与集合,也就是说无需提前创建再插入数据。users表示集合,可以理解为MySQL中的表,只是存储形式不同。在终端执行如下命令验证:

1
2
3
use example			# 切换到example数据库
show collections # 显示当前数据库中的集合 可以看到users
db.users.find() # 查看user集合中的数据

显示内容如下:

1
{ "_id" : ObjectId("591d840df2d3e11cdb349e72"), "username" : "admin", "email" : "admin@example.com", "name" : "Admin User" }

可以看到,插入之后多了一组数据"_id" : ObjectId("591d840df2d3e11cdb349e72"),这是MongoDB自动生成的唯一ID,如果想覆盖它,比如改成用户自增ID或其它具有唯一约束的值,可以使用如下方式插入,注意,键值必须为_id

1
$collection->insertOne(['_id' => 1, 'name' => 'UserName']);

嗯(有点激动.jpg),插进去了。插入多条数据也应该十分容易的了。

1
2
3
4
5
6
7
8
9
10
11
12
$collection->insertMany([
[
'username' => 'admin',
'email' => 'admin@example.com',
'name' => 'Admin User',
],
[
'username' => 'test',
'email' => 'test@example.com',
'name' => 'Test User',
],
]);

查找

现在修改一下test.php文件,来试试查找。

1
2
$document = $collection->findOne(['_id' => 1]);
var_dump($document);

执行文件输出结果如下:

1
2
3
4
5
6
7
8
9
object(MongoDB\Model\BSONDocument)#13 (1) {
["storage":"ArrayObject":private]=>
array(2) {
["_id"]=>
int(1)
["name"]=>
string(7) "UserName"
}
}

要注意_id的数据类型,如果插入的时候是字符串类型,查找时必须保持类型一致。细说查找大概需要很长的篇幅,这里先简单介绍下CURD,以后有时间再单独具体说一下MongoDB的查找操作。

修改

现在我感觉之前插入的东西太乱了,想要清空之后再插入新的数据,嗯(小心翼翼.jpg),在终端执行如下命令:

1
db.users.drop() 		# 返回true表示users集合已被删除

重新插入数据:

1
2
3
4
5
6
$collection->insertOne([
'_id' => 1,
'gender' => 'women',
'age' => 55,
'name' => '武藤兰'
]);

日月如他妈的梭,光阴似他妈的箭,后来你发现曾经年轻的武藤兰不再年轻了,后来你发现有个叫大桥未久的还算不错,那现在试着更新下name试试

1
2
3
4
$collection->updateOne(
['_id' => 1],
['$set' => ['age' => 28, 'name' => '大桥未久']]
);

查看结果,嗯(满心欢喜.jpg),成功了

1
2
db.users.find()
{ "_id" : 1, "gender" : "women", "age" : 28, "name" : "大桥未久" }

删除

撸前淫如魔,撸后圣如佛。你是不是突然间感觉很没意思了,那把大桥未久删除了吧。

1
$collection->deleteOne(['name' => '大桥未久']);

嗯(没有照片符合老子现在的心情.jpg)……