数据库切换
查看当前数据库的名称
db
查看所有数据库名称
列出所有在物理上存在的数据库
show dbs
切换数据库
如果数据库不存在,则指向数据库,但不创建,直到插入数据或创建集合时数据库才被创建
use 数据库名称
默认的数据库为
test
,如果你没有创建新的数据库,集合将存放在test
数据库中。
数据库删除
- 删除当前指向的数据库
如果数据库不存在,则什么也不做
db.dropDatabase()
集合创建
- 语法
db.createCollection(name, options)
name
是要创建的集合的名称
options
是一个文档,用于指定集合的配置
选项参数
是可选的,所以只需要到指定的集合名称。以下是可以使用的选项列表:
例1:不限制集合大小
db.createCollection("stu")
例2:限制集合大小,后面学会插入语句后可以查看效果
参数
capped
:默认值为 false,表示不设置上限,值为 true 表示设置上限参数
size
:当 capped 为 true 时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节。
db.createCollection("stu", {capped:true, size:10})
查看当前数据库的集合
- 语法
show collections
删除集合
- 语法
db.集合名称.drop()
数据类型
以下是 MongoDB 中常用的几种数据类型:
- Object ID:文档
- String:字符串,最常用,必须是有效的 UTF-8
- Boolean:存储一个布尔值,true 或 false
- Integer:整数可以是 32 位或 64 位,这取决于服务器
- Double:存储浮点值
- Arrays:数组或列表,多个值存储到一个键
- Object:用于嵌入式的文档,即一个值为一个文档
- Null:存储 Null 值
- Timestamp:时间戳
- Date:存储当前日期或时间的 UNIX 时间格式
object id
- 每个文档都有一个属性,为 _id,保证每个文档的唯一性
- 可以自己去设置 _id 插入文档
- 如果没有提供,那么 MongoDB 为每个文档提供了一个独特的 _id,类型为 objectID
- objectID 是一个 12 字节的十六进制数:
- 前 4 个字节为当前时间戳
- 接下来是3个字节的机器 ID
- 接下来是2个字节的 MongoDB 的服务进程 ID
- 最后3个字节是简单的增量值
插入
语法
db.集合名称.insert(document)
插入文档时,如果不指定
_id
参数 MongoDB 会为文档分配一个唯一的 ObjectID例1:
db.stu.insert({name:'gj',gender:1})
例2:
s1={_id:'20190101', name:'hr'}
s1.gender=0
db.stu.insert(s1)
简单查询
- 语法
db.集合名称.find()
更新
- 语法
db.集合名称.update(
<query>,
<update>,
{multi: <boolean>}
)
参数
query
:查询条件,类似 sql 语句 update 中的 where 部分参数
update
:更新操作符,类似 sql 语句 update 中 set 部分参数
multi
:可选,默认是 false,表示只更新找到的第一条记录,值为 true 表示把满足条件的文档全部更新例3:全文档更新
db.stu.update({name:'hr'}, {name:'mnc'})
例4:指定属性更新,通过操作符 $set
db.stu.insert({name:'hr', gender:0})
db.stu.update({name:'hr'}, {$set:{name:'hys'}})
- 例5:修改多条匹配到的数据
db.stu.update({}, {$set:{gender:0}}, {multi:true})
保存
语法
db.集合名称.save(document)
如果文档的
_id
已存在则修改,如果不存在则添加。例6:
db.stu.save({_id:'20190102', 'name':'yk', gender:1})
例7:
db.stu.save({_id:'20190102', 'name':'wyk'})
删除
- 语法
db.集合名称.remove(
<query>,
{
justOne: <boolean>
}
)
参数
query
:可选,删除的文档的条件参数
justOne
:可选,如果设为 true 或 1,则只删除一条,默认 false,表示删除多条例8:只删除匹配到的第一条
db.stu.remove({gender:0}, {justOne:true})
例9:全部删除
db.stu.remove{(})
关于 SIZE 的示例
创建集合
例10
db.createCollection('sub', {capped:true, size:10})
插入第一条数据,查询
db.sub.insert({title:'linux', count:10})
db.sub.find()
插入第二条数据,查询
db.sub.insert({title:'web', count:15})
db.sub.find()
插入第三条数据, 查询
db.sub.insert({title:'sql', count:8})
db.sub.find()
插入第四条数据, 查询
db.sub.insert({title:'django', count:12})
db.sub.find()
插入第五条数据, 查询
db.sub.insert({title:'python', count:14})
db.sub.find()
数据查询
基本查询
find() 方法:查询
db.集合名称.find({条件文档})
findOne() 方法:查询,只返回第一个
db.集合名称.findOne({条件文档})
pretty() 方法:将结果格式化
db.集合名称.find({条件文档}).pretty()
比较运算符
等于,默认是等于判断,没有运算符
小于 $lt
小于或等于 $lte
大于 $gt
大于或等于 $gte
例1:查询名称等于 gj 的学生
db.stu.find({name:'gj'})
例2:查询年龄大于或等于 18 的学生
db.stu.find({age:{$gte:18}})
逻辑运算符
查询时可以有多个条件,多个条件之间需要通过逻辑运算符连接
逻辑与:默认是逻辑与的关系
例3:查询年龄大于或等于 18,并且性别为 1 的学生
db.stu.find({age:{$gte:18}, gender:1})
逻辑或:使用 $or
例4:查询年龄大于 18,或性别为0的学生
db.stu.find({$or:[{age:{$gt:18}}, {gender:1}]})
and 和 or 一起使用
例5:查询年龄大于 18 或性别为 0 的学生,并且学生的姓名为 gj
db.stu.find({$or:[{age:{$gt:18}}, {gender:1}], name:'gj'})
范围运算符
- 使用
$in
,$nin
来判断是否在某个范围内 - 例6:查询年龄为 18,28 的学生
db.stu.find({age:{$in:[18,28]}})
支持正则表达式
- 使用
//
或$regex
编写正则表达式 - 例7:查询姓黄的学生
db.stu.find({name:/^黄/})
db.stu.find({name:{$regex:'^黄'}})
自定义查询
- 使用
$where
后面写一个函数,返回满足条件的数据 - 例7:查询年龄大于 30 的学生
db.stu.find({$where:function(){return this.age>30}})
Limit
limit() 方法:用于读取指定数量的文档
语法:
db.集合名称.find().limit(NUMBER)
参数
NUMBER
表示要获取文档的条数如果没有指定参数则显示集合所有文档
例1:查询2条学生信息
db.stu.find().limit(2)
skip
skip() 方法:用于跳过指定数量的文档
语法:
db.集合名称.find().skip(NUMBER)
参数
NUMBER
表示要跳过的记录条数例2:查询从第三条开始的学生信息
db.stu.find().skip(2)
一起使用
- limit() 和 skip() 可以一起使用,不分先后顺序
投影
在查询都的返回结果中,只选择必要的字段,而不是选择一个文档的所有字段
如:一个文档有5个字段,需要显示的有3个,投影其中3个字段即可
语法:
参数为字段与值,值为1表示显示,0表示不显示
db.集合名称.find({}, {字段名称:1, ...})
特殊:对于
_id
列,默认是显示的,如果不显示需要明确指定为0例1:
db.stu.find({}, {name:1, gender:1})
例2:
db.stu.find({}, {_id:0, name:1, gender:1})