mongodb光速上手

开始

mongodb是一种nosql数据库,即非关系型数据库。

安装好后将bin目录添加到环境变量。

安装studio-3t,这是可视化编辑器。

启动

bash 复制代码
mongo --host localhost --port 27017

指令

查看所有库

sql 复制代码
show dbs

使用或创建并使用库

sql 复制代码
use school
use 数据库名

向表中添加数据,数据是json格式,数据库会自己添加id

sql 复制代码
db.student.save({name:"Scoot",sex:"male",age:98,city:"斯德哥尔摩"})
db.表名.save(json格式数据)

查数据

sql 复制代码
db.student.find()
db.表名.find()

用户管理

mongo默认不需要用户就可以使用

sql 复制代码
创建用户
use admin
db.createUser({
    user:"admin",
    pwd:"123456",
    roles:[{role:"root",db:"admin"}]
})

安装目录下新建 mongo.cnf 文件,输入这些配置并开启验证,前两行注意mongo的安装路径

之后重新安装mongo以加载mongo.cnf

sql 复制代码
mongod --config "mongo.cnf路径" --reinstall

管理数据库

sql 复制代码
//创建或使用集合
use school
//创建集合
db.createCollection("student")

//添加一行数据
db.student.insertOne({name:"jack",age:300})

//添加多行数据
db.student.insertMany([{name:"张三",age:3000},{name:"a李四",age:30}])

//查看数据
db.student.find()

//删除数据库
db.dropDatabase("teacher")
db.createCollection("teacher")
db.createCollection("teacher")

//删除集合
db.teacger.drop()

//查看所有集合
show collections

//查看集合记录数量
db.student.count()

查询

条件匹配

|---------|--------------------|
| 表达式 | 作用 |
| lt | \< | | let | <= |
| gt | \> | | gte | >= |
| in | 包括任意一个(字符串数组) | | nin | 全都不包含(字符串数组) |
| ne | 不等于(字符串) | | all | 被匹配的字段值应包含all中所有字段 |
| not | 被匹配的字段值应不包含not中任意 | | or | 几个条件满足一个即可 |
| $exists | 含有某字段的数据 |

sql 复制代码
db.student.insert([
    {name:"点火的",sex:"男",age:33,birthday:"0175-1-1",city:"庐江舒县",class:"5-1"},
    {name:"扇风的",sex:"男",age:27,birthday:"0181-1-1",city:"徐州",class:"5-2"},
    {name:"挨烧的",sex:"男",age:53,birthday:"0155-1-1",city:"沛国谯县",class:"5-3"}
])


//查询
db.student.find()
db.student.find({name:"点火的",sex:"男"})
//查询性别男年龄大于20    $gte代表大于等于    $lt代表小于
db.student.find({sex:"男",age:{$gte:25}})
//只返回第一条记录
db.student.findOne({sex:"男",age:{$gte:25}})
//in实例城市筛选
db.student.find({sex:"男",city:{$in:["庐江舒县","沛国谯县"]}})
//不等于
db.student.find({sex:"男",city:{$ne:"庐江舒县"}})
//不包含
db.student.find({sex:"男",city:{$nin:["庐江舒县","沛国谯县"]}})
sql 复制代码
db.teacher.insert({name:"菩提",role:["能教猴子","能管猴子","能赶猴子"]})
//查询role是能管猴子和能赶猴子的
db.teacher.find({role:{$all:["能管猴子","能赶猴子"]}})
//查询年龄不在30-40的
db.student.find({age:{$not:{$gte:30,$lte:40}}})
db.student.find({$or:[{age:{$lte:30}},{age:{$gte:40}}]})

//查询含有class字段的
db.student.find({class:{$exists:1}})

正则查询

正则查询,没有引号

sql 复制代码
db.student.find({name:/的$/})

分页查询

分页查询,从下标几开始,取几个

sql 复制代码
db.student.find().limit(3)
db.student.find().skip(1).limit(3)
db.student.find().skip(2).limit(3)
db.student.find().skip(3).limit(3)

排序

1升序-1降序,先排序后分页

sql 复制代码
db.student.find().sort({age:1})
db.student.find().sort({age:-1,name:1}).skip(1).limit(3)

去重

用distinct代替find查找即可实现去重,参数为字符串,只查找某一特定字段,返回类型为数组,返回值可以使用javascript函数进行操作。

sql 复制代码
//名字去重,返回的数据类型为数组
db.student.distinct("city")
//使用javascript中的排序函数对结果集进行排序,-1升序,1降序
db.student.distinct("city").sort(function(){return -1})
//使用javascript的获取区间函数,获取数组中区间内数据,
//参数1开始下标值(包含),参数2结束下标值(不包含)
db.student.distinct("city").slice(0,2)

增删改

分为增加一行和增加多行,增加多行需要以方括号包裹

sql 复制代码
db.teacher.insert({name:"菩提",role:["能教猴子","能管猴子","能赶猴子"]})


db.student.insert([
    {name:"点火的",sex:"男",age:33,birthday:"0175-1-1",city:"庐江舒县",class:"5-1"},
    {name:"扇风的",sex:"男",age:27,birthday:"0181-1-1",city:"徐州",class:"5-2"},
    {name:"挨烧的",sex:"男",age:53,birthday:"0155-1-1",city:"沛国谯县",class:"5-3"}
])

这里的删除时指删除一行或多行数据。

sql 复制代码
db.student.remove({class:"2-6",sex:"男"})

这样就删除了所匹配的数据,建议删除前先查询,查完再将find改为remove。

直接更新

更新操作有两种方法,update和updateMany,update指更新找到的第一行,updateMany则更新所有匹配的数据。

sql 复制代码
db.student.update({},{$set:{name:"退休"}})
db.student.update({name:"退休"},{$set:{age:65,name:"123"}})
移除字段

$unset表示删除,1表示真的要删,0则不删

sql 复制代码
db.student.update({},{$unset:{age:1}})
运算

$inc用于加法运算

sql 复制代码
db.student.update({},{$inc:{age:2}})
//为每个age+2
数组

$push 用于向数组添加元素

$pull 用于从数组删除元素

sql 复制代码
db.teacher.update({name:"菩提"},{$push:{role:"能敲猴子"}})
db.teacher.update({name:"菩提"},{$pull:{role:"能敲猴子"}})
相关推荐
golang学习记1 小时前
Zed 新特性:这次继续抄VSCode
vscode·编辑器·zed
javgo.cn3 小时前
Markune:一个开源的 Local-first Markdown 工作区
笔记·编辑器
Roadinforest4 小时前
NoSQL的最终一致性:真的可靠吗?
数据库·nosql
鸽芷咕7 小时前
MongoDB 鸿蒙 PC 适配全记录:从 Bazel 交叉编译到 HNP 原生数据库服务
数据库·mongodb·harmonyos
天天喝旺仔1 天前
Elasticsearch 全文检索实战:Lucene 倒排索引与 NoSQL 文档检索落地
elasticsearch·搜索引擎·全文检索·nosql·lucene
DBA小马哥2 天前
MongoDB 数据同步怎么做?oplog、Change Streams、同步工具 4 种方案一次讲清(附踩坑清单)
数据库·mongodb
2601_962284172 天前
基于Apache Cassandra与Python的数据建模及ETL实践
python·nosql·etl·数据建模·apachecassandra
java_logo2 天前
Docker 部署 MongoDB Community Server:轻松搭建文档数据库平台
数据库·mongodb·docker·nosql·文档数据库·轩辕镜像·mongodb-server
Horn Still Sounds3 天前
51单片机入门:硬件基础、位运算、数码管动态显示完整梳理
嵌入式硬件·mongodb·51单片机
这个DBA有点耶3 天前
非关系型数据库到底有几种?键值、文档、列族、图,一篇讲透
mysql·架构·nosql