MongoDB的基础使用

1. 数据集操作

进入MongoDB控制台:

sh 复制代码
# 展示数据库
show dbs

# 创建并使用数据库
use 数据库名
如:use articledb

# 删除数据库
db.dropDatabase()

注:

数据库命名规则:数据库名可以是满足以下条件的任意UTF-8字符串。

  • 不能是空字符串("")
  • 不得含有(空格)、、$、1、和\o(空字符)
  • 应全部小写。
  • 最多64字节

默认数据库的作用:

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

  • admin:从权限的角度来看,这是root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
  • local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
  • config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

2. 集合操作(类似与表)

创建集合 :

sh 复制代码
db.createCollection("集合名称")

展示集合:

复制代码
show collections
或
show tables

删除集合:

sh 复制代码
db.collection.drop()
或
db.集合名称.drop()

3. 文档操作(类似与数据)

a. 单个文档插入:

使用insert() 或 save() 方法向集合中插入文档,语法如下 :

sh 复制代码
db.集合名称.insert({"articleid":"100000","content":"今天天气真好,阳光明媚","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null})

b. 批量文档插入:

使用insertMany ([json数据,...])

sh 复制代码
db.集合名称.insertMany([
{"articleid":"100000","content":"今天天气真好,阳光明媚","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null},{"articleid":"1000000","content":"今天天气真好,阳光明媚	","userid":"1001","nickname":"Rose","createdatetime":new Date(),"likenum":NumberInt(10),"state":null}
]);

c. 查询文档:

sh 复制代码
# 查询所有
db.集合名称.find()

# 查询指定文档
db.集合名称.find({userid: "11"})

# 查询文档,只返回查询到的第一条数据
db.集合名称.findOne({userid: "11"})

# 投影查询(Projection Query):如果要查询结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定的字段)。
# 如:查询结果只显示 _id、userid、nickname :、
db.集合名称.find({userid:"1003"},{userid:1,nickname:1})

d. 文档的更新

  • 覆盖修改:会直接覆盖掉之前的内容
sh 复制代码
db.集合名称.update({_id:"1"},{likenum:NumberInt(1001)})

注:这里会将之前id为1的内容直接替换为后面指定的这个

  • 局部修改:
sh 复制代码
db.集合名称.update({_id:"2"},{$set:{likenum:NumberInt(889)}})

注:这里只会替换掉之前文档likenum的内容

  • 批量的修改

如:更新所有用户为 1003 的用户的昵称为 凯撒大帝 。

sh 复制代码
# 默认只修改第一条数据
db.集合名称.update({userid:"1003"},{$set:{nickname:"凯撒2"}})

# 修改所有符合条件的数据
db.集合名称.update({userid:"1003"},{$set:{nickname:"凯撒大帝"}},{multi:true})
  • 列值增长的修改

如果我们想实现对某列值在原有值的基础上进行增加或减少,可以使用 $inc 运算符来实现。

需求:对3号数据的点赞数,每次递增1

sh 复制代码
db.集合名称.update({_id:"3"},{$inc:{likenum:NumberInt(1)}})

e. 删除文档

  • 删除全部文档:(慎用)
sh 复制代码
db.集合名称.remove({})
  • 删除指定文档:
sh 复制代码
db.集合名称.remove({_id:"1"})

4. 分页查询

a. 统计查询数量:

  • 统计所有记录数
sh 复制代码
db.集合名称.count()
  • 按条件统计记录数:
sh 复制代码
db.集合名称.count({userid:"1003"})

b. 分页列表查询

可以使用limit()方法来读取指定数量的数据,使用skip()方法来跳过指定数量的数据。

基本语法:

sh 复制代码
db.集合名称.find().limit(条数).skip(条数)

如:

  • 查询前3条
sh 复制代码
db.集合名称.find().limit(3)
  • 查询第4和第5条
sh 复制代码
db.集合名称.find().limit(2).skip(3)

c. 排序查询

sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列

语法:

sh 复制代码
db.集合名称.find().sort(排序方式)

如:

  • 对userid降序排列,并对访问量进行升序排列
sh 复制代码
db.集合名称.find().sort({userid:-1,likenum:1})

注:

skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit(),和命令编写顺序无关。

5. 其他复杂条件查询

a. 正则的复杂条件查询

MongoDB的模糊查询是通过正则表达式的方式实现的。语法为:

sh 复制代码
db.collection.find({field:/正则表达式/})
或 
db.集合名称.find({字段:/正则表达式/})

如:

  • 查询评论内容包含"老六"的所有文档
sh 复制代码
db.集合名称.find({content:/老六/})
  • 查询评论的内容中以"天气"开头的
sh 复制代码
db.集合名称.find({content:/^天气/})

b. 比较查询

<, <=, >, >= 这个操作符也是很常用的

语法如下:

sh 复制代码
db.集合名称.find({ "field" : { $gt: value }}) // 大于: field > value
db.集合名称.find({ "field" : { $lt: value }}) // 小于: field < value
db.集合名称.find({ "field" : { $gte: value }}) // 大于等于: field >= value
db.集合名称.find({ "field" : { $lte: value }}) // 小于等于: field <= value
db.集合名称.find({ "field" : { $ne: value }}) // 不等于: field != value

如:

  • 查询点赞数量大于700的记录
sh 复制代码
db.集合名称.find({likenum:{$gt:NumberInt(700)}})

c. 包含查询

包含:$in操作符

不包含:$nin操作符

如:

  • 查询评论的集合中userid字段包含1003或1004的文档
sh 复制代码
db.集合名称.find({userid:{$in:["1003","1004"]}})
  • 查询评论集合中userid字段不包含1003和1004的文档
sh 复制代码
db.集合名称.find({userid:{$nin:["1003","1004"]}})

d. 条件连接查询

我们如果需要查询同时满足两个以上条件,需要使用$and操作符将条件进行关联。(相 当于SQL的and)

语法为:

sh 复制代码
$and:[ { },{ },{ } ]

如:

  • 查询评论集合中likenum大于等于700 并且小于2000的文档:
sh 复制代码
db.集合名称.find({$and:[{likenum:{$gte:NumberInt(700)}},{likenum:{$lt:NumberInt(2000)}}]})

如果两个以上条件之间是或者的关系,我们使用 操作符进行关联,与前面 and的使用方式相同

语法为:

sh 复制代码
$or:[ { },{ },{ } ]

如:

  • 查询评论集合中userid为1003,或者点赞数小于1000的文档记录
sh 复制代码
db.集合名称.find({$or:[ {userid:"1003"} ,{likenum:{$lt:1000} }]})

6. 常用命令小结

选择切换数据库:

sh 复制代码
use 数据库名

插入数据:

sh 复制代码
db.集合名称.insert({bson数据})

查询所有数据:

sh 复制代码
db.集合名称.find();

条件查询数据:

sh 复制代码
db.集合名称.find({条件})

查询符合条件的第一条记录:

sh 复制代码
db.集合名称.findOne({条件})

查询符合条件的前几条记录:

sh 复制代码
db.集合名称.find({条件}).limit(条数)

查询符合条件的跳过的记录:

sh 复制代码
db.集合名称.find({条件}).skip(条数)

修改数据:

sh 复制代码
db.集合名称.update({条件},{修改后的数据}) 
或
db.集合名称.update({条件},{$set:{要修改部分的字段:数据})

修改数据并自增某字段值:

sh 复制代码
db.集合名称.update({条件},{$inc:{自增的字段:步进值}})

删除数据:

sh 复制代码
db.集合名称.remove({条件})

统计查询:

sh 复制代码
db.集合名称.count({条件})

模糊查询:

sh 复制代码
db.集合名称.find({字段名:/正则表达式/})

条件比较运算:

sh 复制代码
db.集合名称.find({字段名:{$gt:值}})

包含查询:

sh 复制代码
db.集合名称.find({字段名:{$in:[值1,值2]}})或db.集合名称.find({字段名:{$nin:[值1,值2]}})

条件连接查询:

sh 复制代码
db.集合名称.find({$and:[{条件1},{条件2}]})或db.集合名称.find({$or:[{条件1},{条件2}]})  
相关推荐
倔强的石头10610 小时前
文档数据库迁移实战:MongoDB 协议级兼容与 JSONB 引擎性能深度对比
数据库·mongodb·kingbase
he___H10 小时前
mongodb
数据库·mongodb
yongui478341 天前
红外额温枪/体温枪单片机控制源码(STM32方案)
stm32·单片机·mongodb
爬山算法1 天前
MongoDB(63)如何配置数据压缩?
数据库·mongodb
那人如此可好1 天前
MongoDB从零基础搭建到实战
mongodb·db
知识分享小能手1 天前
MongoDB入门学习教程,从入门到精通,MongoDB索引(5)
数据库·学习·mongodb
知识分享小能手2 天前
MongoDB入门学习教程,从入门到精通,MongoDB查询(4)
数据库·学习·mongodb
知识分享小能手3 天前
MongoDB入门学习教程,从入门到精通,MongoDB创建、更新和删除文档(3)
数据库·学习·mongodb
爬山算法3 天前
MongoDB(60)如何使用explain命令?
数据库·mongodb
知识分享小能手4 天前
MongoDB入门学习教程,从入门到精通,MongoDB入门指南 —— 知识点详解(2)
数据库·学习·mongodb