MongoDB常用语法

1.基本指令

  • db ———— 查看当前正在使用的数据库

  • db.stats() ———— 查看当前数据库状态

  • show dbs ———— 显示所有数据库 如果数据为空,不会显示

  • use <数据库名> ———— 进入指定数据库

  • show collections ———— 显示当前数据库的集合

  • db.<集合名>.drop() ———— 删除指定集合

  • db.dropDatabase() ———— 删除当前数据库


2.MongoDB 的增删改查

1
2
3
4
5
6
7
$gte:大于等于

$lte:小于等于

$gt:大于

$lt:小于

2.1 查看

语法:db.<集合名>.find({})

例子:

1
2
3
4
5
6
7
// 指定条件查询:

// 查询letao集合里name值为jack的数据
db.collection.find({name: 'jack'})

// 查询letao集合里age值大于18的数据
db.collection.find({age:{$gt:18}})

2.1.1 查询数据数量

1
2
// 后面加上 .count()
db.collection.find({}).count();

2.1.2 数据排序

1
2
// col 集合中的数据按字段 likes 的降序排列 (1是正序,-1是倒序)
db.collection.find({}).sort({"likes":-1})

2.1.3 模糊查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// sql语法:
select * from user where name like "%花%";

// MongoDB语法:
db.collection.find({name:/花/});

// 例子:查看students里的name包含 ”测试“ 的数据。
db.collection.find({students.name:/测试/})

// 若是以测试为开头的:
db.collection.find({students.name:/^测试/})

// 若是以测试为结尾的:
db.collection.find({students.name:/测试$/})

2.1.4 查询表里 存在 指定字段(即值不为 null) 的数据

1
2
// 查询有age属性的数据(true是有,false没有)
db.collection.find({age:{$exists:true}})

2.1.5 查询多个条件 返回符合其中一项 的数据

1
2
// 查找name值为zs 或 ls的数据
db.collection.find({$or:[{name:'zs'},{name:'ls'}]})

2.1.6 and 和 or 联合使用

1
2
// 查询age值为18,name值为张三或者李四的数据(注意是一个对象)
db.collection.find({ age:18 , $or: [ {name:'张三'},{name:'李四'} ] })

2.1.7 查询 返回指定数量的数据

指定数量:limit(数量)

跳过行数:skip(跳过数量)

1
2
3
4
5
// 找到的数据返回前5条
db.collection.find().limit(5)

// 找到的数据返回 跳过3条后的2条(即第4、5条)
db.collection.find().limit(2).skip(3)

2.1.8 查询一个字段 多个条件 返回 符合其中之一的数据

1
2
3
<!--需求:letao集合里age为 3 或 5 或 8 的数据-->
db.collection.find({age:{$in:[3,5,8]}})
<!--这里使用的是$in-->

2.1.9 查询指定字段 指定类型的数据

1
2
3
4
5
// 查询name类型为double类型的数据
db.collection.find( {name: {$type:'double'} } )

// 查询name类型为string类型的数据
db.collection.find( {name: {$type:'string'} } )

2.1.10 数组查询

1
2
3
4
<!--实例,一节课的老师的id可能有多个,这样:-->
<!--"teachers" : [ 391, 659, 1534 ]-->
<!--需求:查询包含老师id为1534的所有的数据-->
db.collection.find({teachers:1534})

2.1.11 查询数据 返回时 显示指定字段

1
2
3
4
<!--classes表集合中只显示id和title两个字段-->
<!--下面的 status:"700" 为查询条件-->
<!--查询出classes即合理status值为700的数据,只显示id和title-->
db.collection.find({status:"700"},{_id:1,title:1})

2.2 插入

语法:db.<集合名>.insert({})

例子:

1
2
3
4
5
// 插入一条
db.users.insert({name: 'jack', age: 18, gender: 'male'})

// 插入多条
db.users.insertMany( [ {name: 'tom', age: 19}, {name: 'jerry', age: 20} ] )

2.3 修改

语法:db.<集合名>.update({})

例子:

1
2
3
4
5
// 修改一条 name属性值为jack的数据,将其age改为20
db.users.updateOne({name: 'jack'}, {$set: {age: 20}})

// 修改所有 age大于19的数据,将name设置为 中年人
db.users.updateMany({age: {$gt: 19}},{$set: {name: '中年人'}})

2.3.1 删除数据指定字段(不是删数据行)

$exists:为 true 代表有这个字段名存在的项
$unset: 替换成 null,\$unset 替换指定的元素为 null 而不是删除掉指定的元素,此行为保持数组大小和位置一致

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!--参数multi设置为true表示对集合中的所有匹配项执行该命令,若设置为false则只修改找到的第一条文档。-->

<!--寻找到letao集合中有age这个属性的所有项,修改它们的name值为null -->

<!--注意: 不管你值设为啥,$unset都把你选择字段删除-->
db.letao.update({'age':{$exists:true}}, {$unset:{name:'zs'}}, {multi:true})


db.letao.update({'age':{$exists:true}}, {$unset:{name:''}}, false,true) // 第一个Boolean代表如果没有找到数据,是否插入一条
第二个Boolean代表是否匹配所有找到数据

<!--如果指定的字段不存在则操作不做任何处理;-->

<!--当使用$操作符匹配任何数组元素,$unset替换指定的元素为null而不是删除掉指定的元素,此行为保持数组大小和位置一致;-->

<!--如下update()操作删除掉符合条件sku为unknown的文档字段quantity和instock-->

db.products.update(
{ sku: "unknown" },
{ $unset: { quantity: "", instock: "" } }
)

2.4 删除

语法:db.<集合名>.delete({})

例子:

1
2
3
4
5
// 删除一条 age 为18的数据:
db.users.deleteOne({age: 18})

// 删除所有name为jack的数据
db.users.deleteMany({ name: 'jack' })


3.设置使用索引(重要)

作用:给字段设置索引可以加快查询此字段的速度

语法: 设置值为 1 就代表按照升序进行索引,-1 代表按照降序进行索引。

查看索引状态:db.表名.getIndexed()
设置索引:db.表名.createIndex()
删除索引:db.表名.dropIndex()

1
2
3
4
5
6
7
8
9
10
11
// 查看当前letao表所有索引的状态
db.letao.getIndexes()

// 给title字段设置升序的索引,因为设置了unique为true,表示title值不能重复
db.letao.createIndex({title:1},{unique:true})

// 设置title字段为升序,age字段为降序的组合索引
db.letao.createIndex({title:1},{age:-1})

// 删除title字段为升序的索引
db.letao.dropIndex({title:1})






END…






喜欢可以支持一下