基本操作

登陆数据库

1
mongo

查看数据库

语法

1
show databases;

image-20200708135132816

选择数据库

1
use 数据库名

image-20200708135204173

如果切换到一个没有的数据库,例如use admin2,那么会隐式创建这个数据库。(后期当该数据库有数据时,系统自动创建)

1
use admin2

image-20200708135402830

查看集合

1
show collections

image-20200708135654724

创建集合

1
db.createCollection('集合名')

image-20200708135818996

删除集合

1
db.集合名.drop()

image-20200708135904893

删除数据库

  1. 通过use语法选择数据
  2. 通过db.dropDataBase()删除数据库

image-20200708140359164

增删改查

C增

1
db.集合名.insert(JSON数据)

如果集合存在,那么直接插入数据。如果集合不存在,那么会隐式创建。

在test2数据库的c1集合中插入数据(姓名叫webopenfather年龄18岁)

1
2
use test2
db.c1.insert({uname:"webopenfather",age:18})
  • 数据库和集合不存在都隐式创建
  • 对象的键统一不加引号(方便看),但是查看集合数据时系统会自动加
  • mongodb会给每条数据增加一个全球唯一的_id

image-20200708141215126

  1. _id键的组成

    1584876662100

  2. 自己增加_id

    可以,只需要给插入的JSON数据增加_id键即可覆盖(但实战强烈不推荐)

    db.c1.insert({_id:1, uname:"webopenfather", age:18})

    image-20200708141526348

  3. 一次性插入多条数据

    传递数据,数组中写一个个JSON数据即可。

    1
    2
    3
    4
    5
    db.c1.insert([
    {uname:"z3", age:3},
    {uname:"z4", age:4},
    {uname:"w5", age:5}
    ])

    image-20200708141643413

  4. 快速插入10条数据

    由于mongodb底层使用JS引擎实现的,所以支持部分js语法。因此:可以写for循环

    1
    2
    3
    for (var i=1; i<=10; i++) {
    db.c2.insert({uanme: "a"+i, age: i})
    }

    image-20200708142047091

R查询文档

1
db.集合名.find(条件[,查询的列])
条件写法
查询所有的数据{}或者不写
查询age=6的数据{age:6}
既要age=6又要性别=男{age:6,sex:'男'}
查询的列(可选参数)写法
查询全部列(字段)不写
只显示age列(字段){age:1}
除了age列(字段)都显示{age:0}

其他语法

1
2
3
db.集合名.find({
键:{运算符:值}
})
运算符作用
$gt大于
$gte大于等于
$lt小于
$lte小于等于
$ne不等于
$inin
$ninnot in

实例练习

  1. 查询所有数据

    1
    db.c1.find()

    1584879409036

    系统的_id无论如何都会存在

  2. 查询age大于5的数据

    1
    db.c1.find({age:{$gt:5}})

    image-20200708143634776

  3. 查询年龄是5岁、8岁、10岁的数据

    1
    db.c2.find({age:{$in:[5,8,10]}})

    image-20200708144003354

  4. 只看年龄列,或者年龄以外的列

    image-20200708144049382

U修改文档

1
db.集合名.update(条件,新数据[是否新增,是否修改多条,])
  • 新数据

    此数据需要使用修改器,如果不使用,那么会将新数据替换原来的数据。

    1
    db.集合名.update(条件,{修改器:{键:值}}[是否新增,是否修改多条,])
    修改器作用
    $inc递增
    $rename重命名列
    $set修改列值
    $unset删除列
  • 是否新增

    指条件匹配不到数据则插入(true是插入,false否不插入默认)

    1
    db.c3.update({uname:"zs30"},{$set:{age:30}},true)

    image-20200708151113714

  • 是否修改多条

    指将匹配成功的数据都修改(true是,false否默认)

    1
    db.c3.update({uname:"zs2"},{$set:{age:30}},false,true)

    image-20200708151328323

实例练习

准备工作

1
2
3
4
use test2;
for(var i = 1; i<= 10; i++){
db.c3.insert( {"uname":"zs"+i,"age":i} );
}
  1. {uname:"zs1"}改为{uname:"zs2"}

    1
    db.c3.update({uname:"zs1"},{$set:{uname:"zs2"}})

    image-20200708145408835

  2. {uname:"zs10"}的年龄加2岁或减2岁

    1
    db.c3.update({uname:"zs10"},{$inc:{age:2}})

    image-20200708145752429

    递减只需要将2改为-2即可。

  3. 综合练习

    插入数据:db.c4.insert( {uname:"神龙教主",age:888,who:"男",other:"非国人"});

    需求:

    • uname改成 webopenfather

      可以使用修改器$set

    • age增加111

      可以使用修改器$inc

    • who改字段sex

      可以使用修改器$rename

    • other删除

      可以使用修改器$unset

    1
    2
    3
    4
    5
    6
    db.c4.update({uname:'神龙教主'},
    {$set:{uname:'webopenfather'},
    $inc:{age:111},
    $rename:{who:"sex"},
    $unset:{other:true}
    })

    image-20200708150646154

删除文档

1
db.集合名.remove(条件[,是否删除一条])
  • 是否删除一条

    true:是(删除的数据为第一条)

    image-20200708151712548

    false:否

1
db.c3.remove({uname:"zs3"})

image-20200708151920899

总结

高级开发攻城狮统称:所有数据库都需要增删改查CURD标识

MongoDB删除语法:remove

增Create

1
db.集合名.insert(JSON数据)

删Delete

1
2
3
db.集合名.remove(条件 [,是否删除一条truefalse否默认])

也就是默认删除多条

改Update

1
2
3
db.集合名.update(条件, 新数据  [,是否新增,是否修改多条])

升级语法db.集合名.update(条件,{修改器:{键:值}})

查Read

1
db.集合名.find(条件 [,查询的列])