MongoDB的CRUD
本文主要是利用Robo3T可视化工具连接远程服务器MongoDB数据库来操作,模拟实际业务情况,没有远程的连接本地服务器均可。
1、客户端安装配置
下载工具类Robo3T,下载地址 https://robomongo.org/download
这里在弹窗中选择平台即可,因为我想在本地(win)连接远程服务器(CentOS)的MongoDB,所以这里我下载了Windows版本的Robo3T,本篇也主要是在win平台上操作,大家按需下载。
下载完得到一个zip,解压后得到两个exe
一个是studio-3t,一个是robo3t,两者都是MongoDB的图形管理工具,但是studio3是商业付费的,而robo3t是开源免费的,所以我们选择robo3t来进行安装。
双击打开robo3t,进入安装流程
下一步–我同意–选择安装路径
一路傻瓜式安装
直接运行
进入后继续同意
下一步直接finish即可
进入软件后我们选择弹窗里的creat
在弹窗里输入你的服务器地址,(连接本地的话默认localhost)
记住不管连哪里,请保证MongoDB已经启动连接远程的记得修改配置文件中bind_ip改为0.0.0.0,否则会报错,如果是阿里云的,记得安全组开一下,或者直接打开防火墙的27017端口。
修改完配置文件后记得重启MongoDB服务
我怕我说的不清楚,再演示一下,linux下的配置具体操作为:
1)修改配置文件mongodb.conf
vim ../mongodb.conf
#这里..是mongodb的安装路径,自己根据自己的来哈
#然后把bind_ip=127.0.0.1这行注释或者改为0.0.0.0
2)重启mongodb服务
../mongodb restart
2.1)开启27017端口(如果是阿里云则开安全组)
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 27017 -j ACCEPT
都配置正常的话,就能看到这个绿绿的窗口啦
2、界面介绍
连接以后的界面
3、基础操作
创建数据库
use DATABASE_NAME
可以看到这里我们创建了一个新的数据库叫feng,但是show dbs时缺没有看到,是因为这个数据库里没有数据,所以不显示
添加数据
当我们插入一条数据后,在此查询就有信息了
我们可以利用刚才Robo3T里的js框写批量插入的脚本,比如这样
for(var i=0;i<10;i++){
db.feng.insert({"name":"feng---"+i})
}
可以看到也成功插入了10条数据
查询数据
查询语句
db.feng.find() //查询全部
db.feng.find({name:'feng'}) //指定查询
db.feng.fing({name:{$in:['feng','feng--1','feng--3']}}) //根据in后面的选择字段查询
条件查询
条件查询前我们先创建一个新的集合来查询
//创建
db.createCollection("drink")
//插入
db.drink.insertMany([
{name:"可乐",price:3.5},
{name:"雪碧",price:4.0},
{name:"营养快线",price:5.5},
{name:"脉动",price:6.0}
])
//查询price价格低于5块的
db.getCollection('drink').find({price:{$lt:5}})
当然了,这个语句在进入了mongodb服务的命令行也是一样操作的
模糊查询
//找name里含有"可"字的
db.getCollection('drink').find({"name":/可/})
修改操作
当然了,修改也是update,这和你之前学的数据库是没啥区别的,来看看具体语法
//先查询一条数据看看
>db.drink.find({name:"脉动"})
//查询返回的结果
{ "_id" : ObjectId("5f68482526e7f4925ac78b57"), "name" : "脉动", "price" : 6 }
//执行更新语句,有两个参数,第一个参数表示更新条件,这里是找到价格为6的,第二个参数就是更新的数据,我们更新为价格8块
> db.drink.update({price:6},{name:"脉动",price:8})
//匹配到一个,更改1
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
//再次查询发现已经更新了
> db.drink.find({name:"脉动"})
{ "_id" : ObjectId("5f68482526e7f4925ac78b57"), "name" : "脉动", "price" : 8 }
>
删除数据
我们在插入一个可乐1用来删
//插一个数据
db.drink.insertOne({name:"可乐1",price:33.5})
删除语句主要用的remove,若不传参,则报错
传入删除条件,我们的可乐1就没咧
> db.drink.remove({name:"可乐1"})
WriteResult({ "nRemoved" : 1 })
> db.drink.find()
{ "_id" : ObjectId("5f68482526e7f4925ac78b54"), "name" : "可乐", "price" : 3.5 }
{ "_id" : ObjectId("5f68482526e7f4925ac78b55"), "name" : "雪碧", "price" : 4 }
{ "_id" : ObjectId("5f68482526e7f4925ac78b56"), "name" : "营养快线", "price" : 5.5 }
{ "_id" : ObjectId("5f68482526e7f4925ac78b57"), "name" : "脉动", "price" : 8 }
>
其实Robo3T里也可以直接对着表信息操作
也是可以实现大部分操作
附
今天这篇主要是普普通通入个门,MongoDB将数据主要是以键值(key–>value)对来存储,他的文档类似于JSON,比如
{
"_id":ObjectId("5f68482526e7f4925ac78b54")
name:"feng",
age:22,
status:"A",
groups:["game","sports"]
}
上面数据对应的表单如下
id | name | age | status | groups | groups |
---|---|---|---|---|---|
1 | feng | 22 | A | ||
game | sports |
这些同样可以在Robo3T里看到哦
放一个MongoDB和我们传统SQL的字段区别对比
SQL术语、概念 | MongoDB术语、概念 | 解释说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |