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

被折叠的 条评论
为什么被折叠?



