MongoDB的基本操作
基本概念
- 生活中:仓库、架子、物品
- 计算机:数据库(database) 、集合(collection) 、数据/文档(document)
查看数据库
- 语法
show databases
- 效果
- 隐式创建,在有数据时,自动创建
选择数据库
- 语法
use 数据库名
- 效果
删除数据库
- 语法
use 数据库名
db.dropDatabase()
- 效果
查看集合
- 语法
show collections
- 效果
创建集合
- 语法
db.createCollection(‘集合名’)
- 效果
删除集合
- 语法
db.集合名.drop()
- 效果
小总结
数据库 | 集合 | |
查看 | show databases | show collections |
创建 | 有单独的语法,但是忽略隐式创建 | db.createCollection(‘集合名’) |
选择 | use 数据库名 | 省略 |
删除 | use 数据库名;db.dropDatabase() | db.集合名. drop() |
MongoDB文档的增删改查(CURD)
C增
- 语法
- db.集合名.insert(JSON数据)
- 说明
- 集合存在则直接插入数据,集合不存在隐式创建
- 练习
- 在test2数据库的c1集合中插入数据(姓名叫webopenfather年龄18岁)
use test2 db. c1.insert({uname: "webopenfather",age:18})
留心1:数据库和集合不存在都隐式创建
留心2:对象的犍统一不加引号方便看, 但是查看集合数据时系统会自动加
留心3: mongodb会给每条数据增加一个全球唯一-的id犍
- id的组成
思考1:是否可以自定义id值?
回答:可以,只需要给插入的JSON数据增加_id键即可覆盖(但实战强烈不推荐)
db.c1.insert({_id:1, uname:"webopenfather", age:18})
思考2:如何一次性插入多条记录?
回答:传递数据,数组中写-个个SON数据即可
db.c1.insert([ {uname:"z3",age:3}, {uname:"z4",age:4}, {uname:"w5",age:5} ]) 含义:一次性插入3条数据到c1集合
思考3:如何快速插入10条数据
回答: mongodb底层使用JS引擎实现的,所以支持部分js语法
use test2 for(var i = 1;i<=10;i++){ db.c2.insert({uname:"a"+i, age:i}) }
save也可以插入数据,如果save的数据在集合里面就直接替换更新,没有这个数据的存在就新增加一条。
R查
- 基础语法:db.集合名.find(条件 [,查询的列])
条件
查询所有数据 {}或者不写
查询age=6的数据 {age:6}
既要age=6又要性别=男 {age:6,sex:'男'}
查询的列(可选参数
不写 - 这查询全部列(字段
{age:1} 只显示age列(字段
{age:0} 除了age列(字段都显示
留心:不管你怎么写系统自定义的_id都会在
- 升级语法
db.集合名.find({键:值}) 注:值不直接写
{运算符:值}
db.集合名.find({
键:{运算符:值}
})
运算符 | 作用 |
$gt | 大于 |
$gte | 大于等于 |
$lt | 小于 |
$lte | 小于等于 |
$ne | 不等于 |
$in | in |
$nin | not in |
练习1:查询所有数据
练习2:查询年龄大于5岁的数据?
练习3:查询年龄是5岁、8岁、10岁的数据?
练习3:只看年龄列,或者年龄以外的列(_id别管它)?
U改
- 基础语法: db.集合名.update(条件, 新数据 [,是否新增,是否修改多条])
是否新增:指条件匹配不到数据则插入(true是插入,false否不插入默认)
是否修改多条:指将匹配成功的数据都修改(true是,false否默认)
- 升级语法
是否新增:指匹配不到数据则插入(true-是插入,false-否不插入默认)
是否修改多条:将匹配成功的数据都修改(true-是,false-否默认)
db.集合名.update(条件, 新数据)
{修改器: {键:值}}
修改器 | 作用 |
$inc | 递增 |
$rename | 重命名列 |
$set | 修改列值 |
$unset | 删除列 |
- 准备工作
use test2;
for(var i = 1; i<= 10; i++){
db.c3.insert( {"uname":"zs"+i,"age":i} );
}
练习1:将{uname:“zs1”}改为{uname:“zs2”}
发现:默认不是修改,而是替换
解决:使用升级语法 修改器
需求:使用修改器将zs4的姓名改为zs44
语法:db.c3.update({uname:"zs4"}, {$set: {uname: "zs44"}})
练习2:给{uname:“zs10”}的年龄加2岁或者减2岁
练习3:修改器综合练习
插入数据:db.c4.insert( {uname:“神龙教主”,age:888,who:“男”,other:“非国人”});
完成需求:
- uname 改成 webopenfather (修改器:$set)
- age 增加 111 (修改器:$inc)
- who 改字段 sex (修改器:$rename)
- other 删除 (修改器:$unset)
语法分析:
db.c4.update({uname:"神龙教主"}, {uname: "webopenfather"}) #错误,替换 {$set: {uname: "webopenfather"}} {$inc: {age: 111}} {$rename: {who: "sex"}} {$unset: {other: true}} 留心如何一次性写多个修改器 db.c4.update({uname:"神龙教主"}, { $set: {uname: "webopenfather"}, $inc: {age: 111}, $rename: {who: "sex"}, $unset: {other: true} })
练习4:验证语法最后两个参数(了解)
- 【验证】是否新增true是false否:修改uname 等于 zs30的年龄 30岁
- 【验证】是否修改多条true是,false否默认
D删
- 语法:db.集合名.remove(条件 [, 是否删除一条] )
注意:是否删除一条 true是,false否 默认
小总结
高级开发攻城狮统称:所有数据库都需要增删改查CURD标识
MongoDB删除语法:remove
- 增Create
db.集合名.insert(JSON数据)
- 删Delete
db.集合名.remove(条件 [,是否删除一条true是false否默认])
也就是默认删除多条
- 改Update
db.集合名.update(条件, 新数据 [,是否新增,是否修改多条])
升级语法db.集合名.update(条件,{修改器:{键:值}})
- 查Read
db.集合名.find(条件 [,查询的列])