MongoDB 命令

数据库操作

1
2
3
4
5
6
7
8
# 查看数据库
show dbs

# 切换数据库
use test

# 查看当前使用的数据库
db

集合操作

1
2
3
# 查看当前数据库的集合
show collections
show tables

增删改查

1
2
3
4
5
# 插入数据,`_id`存在就报错
db.collecion.insert({})

# 插入数据,`_id`存在会更新
- db.collection.save({})

1
2
# 默认情况会删除所有满足条件的数据,`{justOne:true}`能达到只删除一条的效果
db.test1000.remove({name:"xiaohong"},{justOne:true})

更新

  • db.test1000.update({name:"xiaowang"},{name:"xiaozhao"})

  • 把name为xiaowang的数据替换为{name:"xiaozhao"}

  • db.test1000.update({name:"xiaohong"},{$set:{name:"xiaozhang"}})

  • 把name为xiaowang的数据name的值更新为xiaozhang

  • db.test1000.update({name:"xiaozhang"},{$set:{name:"xiaohong"}},{multi:true})

  • {multi:true}达到更新多条的目的

查询

1
2
3
4
db.collection.find({})

# find().pretty(),这个方法有点类似于我们在mysql命令行敲击命令时末尾加上\G的作用,都是为了使得查询出来的相关数据在命令行展示得更加美观些,便于我们读取其中的数据。
db.collection.find({}).pretty()

WHERE语句,条件操作:逻辑运算符(and、or)

1
2
3
4
5
# MongoDB 的find()方法可以传入多个键(key),每个键(key)以**逗号隔开**,即常规SQL的AND条件
db.coll.find({key1:value1, key2:value2}).pretty()

# MongoDB的OR条件语句使用了关键字 $or,语法格式如下:
db.coll.find({$or: [{key1: value1}, {key2:value2}]}).pretty()

WHERE语句,条件操作:比较运算符(大于、小于、等于)

操作 格式 范例 RDBMS中的类似语句
等于 {<key>:<value>} db.coll.find({“age”:”java”}).pretty() where by = “java”
小于 {<key>:{$lt:<value>}} db.coll.find({“age”:{$lt:50}}).pretty() where age < 50
小于或等于 {<key>:{$lte:<value>}} db.coll.find({“age”:{$lte:50}}).pretty() where age <= 50
大于 {<key>:{$gt:<value>}} db.coll.find({“age”:{$gt:50}}).pretty() where age > 50
大于或等于 {<key>:{$gte:<value>}} db.coll.find({“age”:{$gte:50}}).pretty() where age >= 50
不等于 {<key>:{$ne:<value>}} db.coll.find({“age”:{$ne:50}}).pretty() where age != 50

WHERE语句,条件操作:范围运算符(in、not in)

1
2
3
4
5
# 在 `$in`
db.collection.find({name:{$in:["a","b","c"]}})

# 不在 `$nin`
db.collection.find({name:{$nin:["a","b","c"]}})

limit()方法

如果需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数

语法格式:db.collection.find().limit(number)

:如果没有指定limit()方法中的参数则显示集合中的所有数据

skip()方法

除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数

语法格式:db.collection.find().limit(number).skip(number)

:skip()方法默认参数为0

sort()排序

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

语法格式:db.collection.find().sort({KEY:1})

count()统计

语法格式:下面两个均可

  • db.collection.find({条件}).count()
  • db.collection.count({})

distinct()消除重复

语法格式:db.collection.distinct("gender",{age:{$gt:18}})

返回数组

mongodb的投影:选择返回结果的字段

语法格式:db.collection.find({条件},{name:1,_id:0})

  1. _id默认会显示,置为0不显示
  2. 除了_id之外的其他字段,如果不显示,不写,不能写为0

$type操作符

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果

MongoDB中可以使用的类型如下表所示:

类型 数字 备注
Double 1
String 2
Object 3
Array 4
Binary data 5
Undefined 6 已废弃
Object id 7
Boolean 8
Date 9
Null 10
Regular Expression 11
JavaScript 12
Symbol 13
JavaScript(with scope) 14
32-bit integer 15
Timestamp 16
64-bit integer 17
Min key 18
Max key 255 Query with -1

例:如果想获取”coll”集合中title为String的数据,可以使用以下命令:

db.coll.find({"title":{$type:2}})db.coll.find({"title":{$type:'string'}})

聚合操作的分组和计数如何使用,如何修改输出数据的样式,如何匹配内容

  • 分组 $group

    • db.collection.aggregate({$group:{_id:"$age",count:{$sum:1}}})

    • $group的注意点

      • $group对应的字典中有几个键,结果中就有几个键
      • 分组依据需要放到_id后面
      • 取不同的字段的值需要使用$,$gender,$age
      • 取字典嵌套的字典中的值的时候$_id.country
      • 能够同时按照多个键进行分组{$group:{_id:{country:"$country",province:"$province"}}}
        • 结果是:{_id:{country:"",province:""}
  • 修改输出数据的样式 $project

    • db.collection.aggregate( {$group:{_id:"$age",count:{$sum:1}}}, {$project:{_id:0,age:"$_id",count:1}} )
  • 匹配内容 $match

    • db.collection.aggregate( {$match:{gender:true}, {$group:{_id:"$age",count:{$sum:1}}}, {$project:{_id:0,age:"$_id",count:1}} )
一些示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
db.stu.find(
{$or:[{age:{$gte:20}},{hometown:{$in:["桃花岛","华⼭"]}}]}
)

#按照gender进行分组,获取不同组数据的个数和平均年龄
db.stu.aggregate(
{$group:{_id:"$gender",count:{$sum:1},avg_age:{$avg:"$age"}}},
{$project:{gender:"$_id",count:1,avg_age:"$avg_age",_id:0}}
)
# 按照hometown进行分组,获取不同组的平均年龄
db.stu.aggregate(
{$group:{_id:"$hometown",mean_age:{$avg:"$age"}}}
)
#使用$group统计整个文档
db.stu.aggregate(
{$group:{_id:null,count:{$sum:1},mean_age:{$avg:"$age"}}}
)
#选择年龄大于20的学生,观察男性和女性有多少人
db.stu.aggregate(
{$match:{$or:[{age:{$gt:20}},{hometown:{$in:["蒙古","⼤理"]}}]}},
{$group:{_id:"$gender",count:{$sum:1}}},
{$project:{_id:0,gender:"$_id",count:1}}
)

#page37页练习
db.tv3.aggregate(
{$group:{_id:{country:"$country",province:"$province",userid:"$userid"}}},
{$group:{_id:{country:"$_id.country",province:"$_id.province"},count:{$sum:1}}},
{$project:{country:"$_id.country",province:"$_id.province",count:1,_id:0}}
)

MongoDB 命令
https://flepeng.github.io/041-MongoDB-MongoDB-命令/
作者
Lepeng
发布于
2021年6月6日
许可协议