mongo基本使用

本文围绕MongoDB展开,介绍其是由C++编写的分布式开源数据库。详细阐述了安装步骤,包括下载、配置与启动登录;讲解了库管理,如查看、切换、创建和删除数据库;还介绍了增删改查操作,如隐式创建集合、插入数据、条件查询等;最后说明了认证流程,包括创建管理员、开启认证和登录方式。

一、mongodb简介

mongodb是由C++语言编写的分布式文件存储的开源数据库。在高负荷的情况下,可以添加更多的节点,来保证服务器的性能

社区版官网地址

https://www.mongodb.com/try/download/community

二、安装

1.下载

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.29.tgz

2.安装

tar xf mongodb-linux-x86_64-rhel70-4.4.29.tgz
mv mongodb-linux-x86_64-rhel70-4.4.29 /usr/local/mongodb4.4.29
mkdir /data/mongodb/ -p

启动需要的配置文件

mkdir /usr/local/mongodb4.4.29/conf/

cat conf/mongodb.conf
# 内容如下
dbpath=/data/mongodb/
port=27017
bind_ip=0.0.0.0
fork=true
logpath=/data/mongodb/mongodb.log
logappend=true
auth=false

3.启动mongodb

ln -s /usr/local/mongodb4.4.29/bin/mongo* /usr/local/bin/

mongod -f /usr/local/mongodb4.4.29/conf/mongodb.conf

[root@node-1 conf]# netstat -antp |grep 27017
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      17525/mongod

4.登录mongodb

mongodb登录后,默认是在test库

mongo

三、mongodb库管理

1.查看所有数据库

> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB

2.查看当前数据库

> db
test

3.切换数据库

> use admin
switched to db admin
> db
admin

4.创建数据库

use 可以切换数据库,也可以创建数据库,但是切换到不存在的数据库中,必须要写入数据才可以创建数据库

use 自定义数据库

例子:

> use mydb
switched to db mydb

# 插入数据
> db.t1.insert({"name":"zhangsan","age":20,"gender":"boy"})
WriteResult({ "nInserted" : 1 })

#输入数据后,发现数据库已经有了
> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB
mydb    0.000GB

5.查看数据库中的集合

show tables;
# 这是可以看到集合(表)了
> show tables;
t1

6.删除数据库

删除数据库必须先切换到数据库中,才能删除数据库,要注意,mongodb是区分大小写的

use 数据库
db.dropDatabase()

四、mongo增删改查

1.隐式创建集合(表)

现在看mydb库下没有任何集合。

> db
mydb
> show tables;

所谓隐式创建,就是不需要先创建表在插入数据。而是在没有集合的情况,直接插入数据,集合就创建完成了

> db.t2.insert({"name":"zhangsan","age":"20","gender":"boy"})
WriteResult({ "nInserted" : 1 })

# 此时发现集合t2已经成功创建了
> show tables;
t2

2.插入单条数据

2.1 小技巧

在json数据中,key的名称必须要""引起来,在mongo中也是如此,但是在插入或者查询的时候,key可以不用双引号引起来,mongo会自动帮用户添加双引号

2.2 实例

> db.t2.insert({"name":"zhangsan","age":"20"})
WriteResult({ "nInserted" : 1 })
> db.t2.insert({"message":"log","time":"2024-03-03 18:04"})
WriteResult({ "nInserted" : 1 })

# 查看数据
> db.t2.find()
{ "_id" : ObjectId("65e44a77d8d766f8f72ad19f"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "_id" : ObjectId("65e44af5d8d766f8f72ad1a0"), "name" : "zhangsan", "age" : "20" }
{ "_id" : ObjectId("65e44b1dd8d766f8f72ad1a1"), "message" : "log", "time" : "2024-03-03 18:04" }

这里可以看出,mongo是非关系型数据库,不像关系型数据库那样,每行数据字段必须一样。

3.插入多条数据

insertMany可以插入多条数据,当然使用insert也可以4。

> db.t2.insertMany([{"name":"张三"},{"name":"李四"}])
{
	"acknowledged" : true,
	"insertedIds" : [
		ObjectId("65e44c94d8d766f8f72ad1a2"),
		ObjectId("65e44c94d8d766f8f72ad1a3")
	]
}

# 数据已经插入成功
> db.t2.find()
{ "_id" : ObjectId("65e44a77d8d766f8f72ad19f"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "_id" : ObjectId("65e44af5d8d766f8f72ad1a0"), "name" : "zhangsan", "age" : "20" }
{ "_id" : ObjectId("65e44b1dd8d766f8f72ad1a1"), "message" : "log", "time" : "2024-03-03 18:04" }
{ "_id" : ObjectId("65e44c94d8d766f8f72ad1a2"), "name" : "张三" }
{ "_id" : ObjectId("65e44c94d8d766f8f72ad1a3"), "name" : "李四" }

4.查看文档条数

count(0)

> db.t2.count()
9

5.查看集合数据

5.1 查看所有数据

find()

> db.t2.find()
{ "_id" : ObjectId("65e44a77d8d766f8f72ad19f"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "_id" : ObjectId("65e44af5d8d766f8f72ad1a0"), "name" : "zhangsan", "age" : "20" }
{ "_id" : ObjectId("65e44b1dd8d766f8f72ad1a1"), "message" : "log", "time" : "2024-03-03 18:04" }
{ "_id" : ObjectId("65e44c94d8d766f8f72ad1a2"), "name" : "张三" }
{ "_id" : ObjectId("65e44c94d8d766f8f72ad1a3"), "name" : "李四" }

5.2 条件查询

查找条件是 name是zhangsan的数据

> db.t2.find({"name":"zhangsan"})
{ "_id" : ObjectId("65e44a77d8d766f8f72ad19f"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "_id" : ObjectId("65e44af5d8d766f8f72ad1a0"), "name" : "zhangsan", "age" : "20" }

5.2 多条件查询

在插入两条数据

> db.t2.insert({"name":"zhangsan","age":"21","gender":"girl"})
> db.t2.insert({"name":"xiaohong","age":"21","gender":"girl"})

> db.t2.find()
{ "_id" : ObjectId("65e44a77d8d766f8f72ad19f"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "_id" : ObjectId("65e44af5d8d766f8f72ad1a0"), "name" : "zhangsan", "age" : "20" }
{ "_id" : ObjectId("65e44b1dd8d766f8f72ad1a1"), "message" : "log", "time" : "2024-03-03 18:04" }
{ "_id" : ObjectId("65e44c94d8d766f8f72ad1a2"), "name" : "张三" }
{ "_id" : ObjectId("65e44c94d8d766f8f72ad1a3"), "name" : "李四" }
{ "_id" : ObjectId("65e458b2d8d766f8f72ad1a8"), "name" : "xiaohong", "age" : "21", "gender" : "girl" }
{ "_id" : ObjectId("65e4592cd8d766f8f72ad1a9"), "name" : "zhangsan", "age" : "21", "gender" : "girl" }

查找name=zhangsan 并且gender=girl

> db.t2.find({"name":"zhangsan","gender":"girl"})
{ "_id" : ObjectId("65e4592cd8d766f8f72ad1a9"), "name" : "zhangsan", "age" : "21", "gender" : "girl" }

5.3 选择性返回字段

语法:
db.集合.find({查找条件}{“字段”:0|1})

0:不返回该字段
1:返回该字段

例子:

这是正常情况下,返回的数据

> db.t2.find({"name":"zhangsan"})
{ "_id" : ObjectId("65e44a77d8d766f8f72ad19f"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "_id" : ObjectId("65e44af5d8d766f8f72ad1a0"), "name" : "zhangsan", "age" : "20" }
{ "_id" : ObjectId("65e4592cd8d766f8f72ad1a9"), "name" : "zhangsan", "age" : "21", "gender" : "girl" }
5.3.1 不返回_id字段

不论返回哪些字段_id字段一定会返回的。所以可以先不返回id字段

> db.t2.find({"name":"zhangsan"},{"_id": 0})
{ "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "name" : "zhangsan", "age" : "20" }
{ "name" : "zhangsan", "age" : "21", "gender" : "girl" 
5.3.2 只返回指定字段

只返回了name字段

> db.t2.find({"name":"zhangsan"},{"_id": 0,"name":1})
{ "name" : "zhangsan" }
{ "name" : "zhangsan" }
{ "name" : "zhangsan" }

6.范围查询

范围查询关键字

$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
> db.t2.insert({"name":"zhangsan","age":20})
WriteResult({ "nInserted" : 1 })
> db.t2.insert({"name":"zhangsan","age":21})
WriteResult({ "nInserted" : 1 })
> db.t2.insert({"name":"zhangsan","age":25})
WriteResult({ "nInserted" : 1 })

6.1 大于

> db.t2.find({"age":{$gt:20}},{"_id": 0})
{ "name" : "zhangsan", "age" : 21 }
{ "name" : "zhangsan", "age" : 25 

6.2 大于等于

> db.t2.find({"age":{$gte:20}},{"_id": 0})
{ "name" : "zhangsan", "age" : 20 }
{ "name" : "zhangsan", "age" : 21 }
{ "name" : "zhangsan", "age" : 25 }

6.3 逻辑或

年龄是20或者是21的

> db.t2.find({$or:[{"age":20},{"age":21}]})
{ "_id" : ObjectId("65e47b6dd8d766f8f72ad1aa"), "name" : "zhangsan", "age" : 20 }
{ "_id" : ObjectId("65e47f88d8d766f8f72ad1ab"), "name" : "zhangsan", "age" : 21 }

6.4 区间查找

db.t2.insert({"time": "16:00"})
db.t2.insert({"time": "17:00"})
db.t2.insert({"time": "17:30"})
db.t2.insert({"time": "18:00"})
db.t2.insert({"time": "18:45"})
db.t2.insert({"time": "19:00"})
db.t2.insert({"time": "20:00"})

查找时间范围,这里只是实例语法,具体时间格式,根据情况而定。
过滤时间在17:00和18:50之间

> db.t2.find({"time":{$gt:"17:00",$lte:"18:50"}})
{ "_id" : ObjectId("65e48fdcd8d766f8f72ad1b4"), "time" : "17:30" }
{ "_id" : ObjectId("65e48fdcd8d766f8f72ad1b5"), "time" : "18:00" }
{ "_id" : ObjectId("65e48fdcd8d766f8f72ad1b6"), "time" : "18:45" }

7.文档的删除

> db.t2.find()
{ "_id" : ObjectId("65e574081cdd87ce0eb0f3d6"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "_id" : ObjectId("65e5740c1cdd87ce0eb0f3d7"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "_id" : ObjectId("65e5740d1cdd87ce0eb0f3d8"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "_id" : ObjectId("65e5740d1cdd87ce0eb0f3d9"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "_id" : ObjectId("65e5740d1cdd87ce0eb0f3da"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }
{ "_id" : ObjectId("65e5740e1cdd87ce0eb0f3db"), "name" : "zhangsan", "age" : "20", "gender" : "boy" }

# 根据条件删除
> db.t2.remove({name: "zhangsan"})
WriteResult({ "nRemoved" : 6 })

# 符合条件的内容全部
> db.t2.find()
> 

五、mongo认证

1.创建管理员

一定要切换到admin库下创建管理员

> use admin
switched to db admin
> db.createUser({user:"root",pwd:"123",roles:["root"]})
Successfully added user: { "user" : "root", "roles" : [ "root" ] }

2.查看用户

> db.system.users.find({user:"root"},{user: 1});
{ "_id" : "admin.root", "user" : "root" }

3.开启认证

将配置文件中的auth改为true

[root@localhost conf]# grep "auth" /usr/local/mongodb4.4.29/conf/mongdb.conf 
auth=true

重启mongo

4.登陆

4.1方式1:库内认证

[root@localhost ~]# mongo
# 一定要切到admin库下,因为创建用户的时候是在admin库下创建的
> use mydb
switched to db mydb

# 开始认证 1 表示验证成功。也就是说用户和密码都正确
> db.auth("root","123")
1

> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB
mydb    0.000GB

> use mydb
switched to db mydb
> show tables;
t1

# 可以查看到数据了
> db.t1.find()
{ "_id" : ObjectId("65e568da305a53a9be4f8350"), "name" : "zhangsan" }

4.2 方式2:shell终端认证

mongo  --authenticationDatabase admin -u root -p 123
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值