MongoDB数据库常用操作
- 1.查看所有的数据库
- 格式: show databases;
- 简写: show dbs;
- 2.创建或者使用一个数据库
- 格式: use 数据库名;
- 当对应的数据库不存在的时候,表示创建该数据库
- 如果数据库已经存在,表示使用该数据库
- 注意:
- 如果创建了一个新的数据库,而该数据库中没有数据,则使用show dbs查看的时候看不到,插入数据库后,即可查看到
- 插入数据: db.student.insert({name:“Lucy”})
- 格式: use 数据库名;
- 3.查看当前使用的数据库
- 格式: db 代表的是当前数据库
- 或者 db.getName() 可以查看当前数据库的名字
- 4.删除当前数据库
- db.dropDatabase()
- 5.帮助命令 help
- 6.退出
- exit
MongoDB数据库常用操作–集合的操作
- 1.查看当前库中的所有集合(相当于关系型数据库的 表)
- 格式: show collections;
- 2.创建一个集合
- 方式1:
- db.createCollection(“集合名”)–集合名需要加上引号
- 例:db.createCollection(“集合名”)
- 方式2:
- db.集合名.insert(数据)
- 例:db.student2.insert({name:“张三”})
- 区别:
- 方式1是创建一个空的集合,如果集合已经存在,不会覆盖创建
- 方式2:如果对应的集合不存在表示创建一个集合,并插入数据
- 如果对应的集合存在,表示直接插入一条数据
- 方式1:
- 3.删除一个集合
- 格式: db.集合名.drop()
MongoDB数据库常用操作–文档的操作
-
1.插入数据(相当于关系型数据库表中一行数据 row)
- 1.添加一个数据
- 格式: db.集合名.insert(数据)
- 数据: key-value的形式
- 是bson格式, 与json格式一样
- 格式:
- 1.{key1:value,key2:value, keyN:value} – jsonObject
- 2.[{key1:value,key2:value, keyN:value}, {key1:value,key2:value, keyN:value}] – jsonArray
- 3.{key1:嵌套json数据,key2:value, keyN:value}
- 示例:
- db.student.insert({name:“LiSi”,age:18,address:“BeiJing”})
- WriteResult({ “nInserted” : 1 })表示插入成功
- 注意: mongodb插入数据时会默认生成一个 _id相当于关系型数据库中的主健
- 如: “_id” : ObjectId(“5b8f45c12e3e35173c33f13c”)
- 格式: db.集合名.insert(数据)
- 2.添加多个数据
- 格式: db.集合名.insert([数据1,数据2,数据n])
- 示例:
- db.student.insert([{name:“TianQi”,age:16,address:“HeFei”}, {name:“WangWu”,age:22,address:“DongJing”}, {name:“ZhaoLiu”,age:20,address:“NanJing”}])
- 3.插入数据 save 保存
- 格式: db.集合名.save(数据) 使用方法与insert一致
- 示例:
- db.student.save({name:‘钱毅’,age:32,address:“江干”})
- 区别:
- db.student.save({ “_id” :ObjectId(“5b8f47d03d9b6b894071334b”),name:‘钱毅’})
- 如果使用的是save,而且设置_id属性,且_id已经存在时save表示修改数据
- db.student.insert({ “_id” :ObjectId(“5b8f47d03d9b6b894071334b”),name:‘周毅’})
- 如果使用的是insert,而且设置_id属性,且_id已经存在时, 则insert会报错
- 示例:
- 格式: db.集合名.save(数据) 使用方法与insert一致
- 1.添加一个数据
-
2.查询数据—结果是 bson的形式
- 1.查询所有的数据
- 格式: db.集合名.find()
- 2.根据条件来查询数据
- MySQL数据库: select 字段名, from 表 where 条件
- MongoDB数据库格式: db.集合名.find(query,names)
- 参数query 是查询条件
- 参数names 是要展示的字段名
- 注意:
- query,names都是json的数据格式
- query参数
- 如: {age:22} 表示查询age=22的数据
- names参数
- 如: {name:1,age:1} 表示只显示name属性和age属性
- 注意:如果没有names,则所有的属性及值都显示
- 1表示显示, 0 表示不显示
- 需求:查询年龄是22岁的人的姓名,地址
- 例: db.student.find({age:22},{name:1,address:1})
- 3.查询一条数据
- 格式:
- db.集合名.findOne(query,names)
- 示例:
- db.student.findOne({name:‘Lucy’})
- 根据_id来查询
- 示例:
- db.student.findOne({"_id":ObjectId(“5b8f47d03d9b6b894071334a”)})
- 格式:
- 4.格式化查询结果
- 格式: db.集合名.find().pretty()
- 1.查询所有的数据
-
3.数据的修改
- MySQL数据库修改数据:
- update 表名 set 字段名 = 属性值…where 条件
- MongoDB格式:
- db.集合名.update(query,set,{upsert:布尔类型,multi:布尔类型})
- 参数都是json的格式
- 1.query 查询条件
- 2.set 要修改的属性和对应的属性值
- 需求:
- 将ZhaoLiu的地址改为滨江
- 示例:
- db.student.update({name:“ZhaoLiu”},{address:“滨江”})
- 注意: 如果以以上方式修改,是将整个数据改为 {address:“滨江”},而不是只修改address属性只修该属性:
- 正确的开启方式
- db.student.update({name:“ZhaoLiu”},{$set:{address:“滨江”}})
- db.student.update({name:“ZhaoLiu”},{address:“滨江”})
- 格式:db.集合名.update(query,{$set:{属性名:属性值}})
- 其他修改数据的格式
- 格式:db.集合名.update(query,{$inc:{属性名:值}})
- 表示在某个属性上添加某个值
- 需求:
- MySQL数据库修改数据:
意外!! * 3. upsert 表示在修改数据的时候,如果查询条件没有找到对应的数据, - 是否将修改的内容当作新的数据添加到集合中 - true 表示添加进来 - false 表示不当作新数据添加进来 - 默认是false - 例: - db.student.update({name:"LiLei"},{address:"九堡"},{upsert:true})
* 4.multi
- 在修改数据时如果查询出了多条符合条件的数据,是否将多条数据全部进行修改
- true 表示全部都修改
- false 表示值修改匹配的第一条数据
- 默认是false
- 示例:
- db.student.update({name:"Lucy"},{$set:{sex:"不明"}},{multi:true})
- 4.删除数据
- MySQL数据库格式:delete from 表名 where 条件
- MongoDB数据库格式:
- db.集合名.remove(query,{justOne:布尔值})
- 示例:
- db.student.remove({name:“LiLei”})
- db.student.remove({name:“Lucy”},{justOne:true})
- 注意:默认会将所有符合条件的数据都删除,
- justOne表示是否只删除 第一条符合条件的数据
- true 只删除一条, false表示全部删除, 默认为false
MongoDB数据库常用操作–查询条件
-
1.比较运算符
- $gt 大于
- $lt 小于
- $gte 大于等于
- $lte 小于等于
- $eq 等于 或者 :
- $ne 不等于
- 格式:
- db.集合名.find({字段名:{运算符:值}})
- 需求:
- 查询年龄大于60的student
- 示例:
- db.student.find({age:{$gt:60}})
- 需求:
- 查询年龄在大于等于40且小于等于60的数据
- 示例:
- db.student.find({age:{$gte:40}})
-
2.逻辑运算符
-
$and 且 或者 ,
- 格式: db.集合名.find({条件1,条件2})
- 格式2:db.集合名.find({$and:[{条件1},{条件2}]})
- 需求:
- 找出姓名是 TianQi 的 且 年龄是 22岁 的数据?
- 示例:
- db.student.find({name:“TianQi”,age:22})
- 或者
- db.student.find({$and:[{name:“TianQi”},{age:22}]})
- 需求:
- 查询年龄在大于等于20且小于等于22的数据
- 错误写法: db.student.find({age:{KaTeX parse error: Expected 'EOF', got '}' at position 7: gte:20}̲,age:{lte:22}})
- 正确写法:
- db.student.find({age:{ lte:22}})
- db.newclass.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: and:[{age:{gte:18}},{age:{$lte:20}}]})
-
$or 或者
- 格式:
- db.集合名.find({$or:[{条件1},{条件2}]})
- 需求:
- 查询数年龄是 20 的或者 22 的
- 示例:
- db.student.find({$or:[{age:20},{age:22}]})
- 需求:
- 查询出年龄是20的且住在滨江的 或者 年龄22且住DongJing的
- 示例:
- (age = 20 and address=“滨江”) or (age = 22 and address=“DongJing”)
- 格式:
-
$not 非
- 格式: db.集合名.find({$not:{条件1}})
-
-
3.模糊运算符
- 插入几条数据:
- db.student.insert(
[{name:‘张三’,age:22,address:“北京”,sex:“女”},
{name:‘李四’,age:33,address:“南京”,sex:“女”},
{name:‘王武’,age:44,address:“东京”,sex:“男”},
{name:‘赵六’,age:55,address:“西京”,sex:“男”},
{name:‘田七’,age:66,address:“中京”,sex:“男”}])
- db.student.insert(
-
格式:
- db.集合名.find({字段名:/匹配的数据/})
- 注意: / / 不需要将引号
-
需求:
- 查找出名字中包含 张 字的数据
-
示例:
- db.student.find({name:/张/})
-
/^字符/ 表示以某个字符开始的数据
-
/字符$/ 表示以某个字符结尾的数据
-
需求: 查找出姓 赵 的数据
-
db.student.find({name:/^赵/})
-
db.student.find({name:/七$/})
- 插入几条数据:
-
4.分页 ---- 关系: limit 值1,值2
-
limit(number) 表示读取指点数量的数据 相当于 值2
-
skip(position) 表示跳到指定下标位置开始读数据 注: 位置从 0 开始
-
db.student.find().skip(3)
-
db.student.find().limit(3)
-
需求: 从第六条开始,获取3条数据
-
db.student.find().skip(6).limit(3)
-
需求: 获取第n页的3条数据,
-
格式: db.student.find().skip((n-1)*3).limit(3)
-
-
5.排序 sort 字段名 升序/降序
- 格式:
- db.student.find().sort({字段名:1/-1})
- 1: 表示升序
- -1: 降序
- 需求:
- 按照年龄的升序排序
- 示例:
- db.student.find().sort({age:1})
- 格式:
-
6.计算查询结果的数量
- db.student.find().count()