MongoDB - CURD操作
在上一篇介绍了如何为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文件的第二行的example和users分别表示什么。MongoDB支持在插入数据的时候自动创建数据库与集合,也就是说无需提前创建再插入数据。users表示集合,可以理解为MySQL中的表,只是存储形式不同。在终端执行如下命令验证:1
2
3use 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
9object(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
2db.users.find()
{ "_id" : 1, "gender" : "women", "age" : 28, "name" : "大桥未久" }
删除
撸前淫如魔,撸后圣如佛。你是不是突然间感觉很没意思了,那把大桥未久删除了吧。1
$collection->deleteOne(['name' => '大桥未久']);
嗯(没有照片符合老子现在的心情.jpg)……