database相关的命令
- 查看当前的数据库
- db
- 查看所有的数据库
- show dbs / show databases
- 切换数据库
- use db_name
- 如果数据库不存在也不会报错,会是选择数据库的状态,当向其中添加集合后自动创建
- 删除当前的数据库
- db.dropDatabase()
集合相关的命令(相当于mysql的表结构)
- 手动创建集合
- db.createCollection(collection_name, {capped: <Boolean>, size: <int>} )
- collection_name: 为创建集合的名称
- 参数capped: 默认值为false表示不设置上限,值为true表示设置上限
- 参数size: 参数可选,当capped值为true时, 需要指定此参数, 表示上限⼤⼩,当⽂档达到上限时, 会将之前的数据覆盖, 单位为字节
- 示例:
- db.createCollection("stu")
- db.createCollection("sub", { capped : true, size : 10 } )
- 自动创建集合
- db.集合名称.insert( <data> )
- 要指定创建的集合名称,添加的数据应该为字典类型的数据
- 向一个不存在的集合装添加数据,便会自动创建出包含添加数据的集合
- 查看集合
- show collections
- 删除集合
- db.集合名称.drop( )
集合数据增删改查
- mongodb支持的数据类型
- Object ID: ⽂档ID
- String: 字符串, 最常⽤, 必须是有效的UTF-8
- Boolean: 存储⼀个布尔值, true或false(mongodb中的布尔类型是小写)
- Integer: 整数可以是32位或64位, 这取决于服务器
- Double: 存储浮点值
- Arrays: 数组或列表, 多个值存储到⼀个键
- Object: ⽤于嵌⼊式的⽂档, 即⼀个值为⼀个⽂档
- Null: 存储Null值(对应python中的None)
- Timestamp: 时间戳, 表示从1970-1-1到现在的总秒数
- Date: 存储当前⽇期或时间的UNIX时间格式,
- mongodb数据操作的注意点
- 创建mongodb⽇期Date语句如下
- 在终端中
- new Date('2017-12-20') 参数的格式为YYYY-MM-DD
- 在python代码中
- datetime.datetime( ) 参数格式为y, M, d, h, m, s
- datetime.datetime.now( )
- 文档的_id属性
- 每个⽂档都有⼀个_id属性,当创建一个文档的时候,如果没有指定_id 的数值,mongodb会自动创建一个_id属性, 类型为objectID
- objectID是⼀个12字节的⼗六进制数:前4个字节为当前时间戳, 接下来3个字节的机器ID, 接下来的2个字节中MongoDB的服务进程id, 最后3个字节是简单的增量值
- 数据的插入
- 命令格式
- db.collection_name.insert(<document>) 向集合中插入文档数据
- <document>字典形式的数据,在终端中键可以不加引号
- 插⼊⽂档时, 如果不指定_id参数, MongoDB会为⽂档分配⼀个唯⼀的ObjectId
- 当插入的_id已经存在的时候,会报错
- 插入多条数据的时候,可以用逗号隔开,放在一个列表里进行插入
- 示例
- db.stu.insert({name:'gj',gender:1})
- db.stu.insert({_id:"20170101",name:'gj',gender:1})
- 数据的删除
- 命令格式
- db.collection_name.remove(<query>,{justOne: <boolean>})
- <query>: 参数可选,删除⽂档的条件, 不加改参数全部删除
- justOne: 参数可选, 如果设为true或1, 则只删除第⼀条, 默认false, 表示删除多条
- 数据的修改
- 替换单条数据
- 命令格式
- db.collection_name.save(<document>) 替换单条文档数据
- 如果⽂档的_id已经存在则替换, 如果⽂档的_id不存在则新建并插入
- 示例:
- db.stu.save({name:'gj',gender:1})
- 批量替换数据
- 命令格式
- db.集合名称.update(<query> ,<update>,{multi: <boolean>}) 替换满足条件文档数据
- <query>: 查询条件参数, 字典类型数据
- <update>: 更新操作符,有字典形式和$set两种形式
- {update} 会将匹配到的文档替换为update更新后的文档
- {$set: { update }} 可以将update更新的字段内容,只进行对应字段的替换
- multi: 参数可选,字典类型数据,默认是false,表示只更新找到的第⼀条记录, 值为true表示把满⾜条件的⽂档全部更新
- multi 只有在$set模式下才能使用,在非$set模式下只能更新第一条数据
- 如果$set 后面加的字段不存在,那么将会新增字段
- 示例:
- db.stu.update({name:'hr'},{name:'mnc'}) 更新一条
- db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一条
- db.stu.update({},{$set:{gender:0}},{multi:true}) 更新全部
- 数据的查询
- 命令格式:
- db.集合名称.find(<query>) 满足条件文档数据的查询
- db.集合名称.find(<query>).pretty() 对文档查询结果进行格式化
- <query> 查询条件参数.
- 当<query> 参数为空的时候,默认会查询集合中的所有数据
- db.集合名称.findOne(<query>) 满足条件的第一个文档数据的查询
- <query> 查询条件参数.
数据查询过滤条件(筛选数据使用)
- 运算符
- 比较运算符
- 等于(默认是等于判断, 没有运算符)
- $lt ⼩于(less than)
- $lte ⼩于等于(less than equal)
- $gt ⼤于(greater than)
- $gte ⼤于等于
- $ne 不等于
- 示例:
- db.stu.find({age:{$gte:18}})
- 逻辑运算符
- 逻辑与关系
- and 在{ }写多个条件即可
- 示例:
- db.stu.find({age:{$gte:18},gender:true})
- 逻辑或关系
- or 使⽤$or(值为数组, 数组中每个元素为json)
- 示例:
- db.stu.find({$or:[{age:{$gt:18}},{gender:false}]}) 一个文档多个字段限制
- db.stu.find({age: {$gte: 16, $lt: 45}}) 一个字段多个限制
- 逻辑与/逻辑或的综合应用
- 示例:
- db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
- 范围运算符
- $in 用来判断是否在某个范围内
- 示例:
- db.stu.find({age:{$in:[18,28]}}) 查询年龄为18、28的学生
- 正则表达式
- // 或 $regex 编写正则表达式
- 示例:
- db.stu.find({name:/^⻩/})
- db.stu.find({name:{$regex:'^⻩'}})
- 自定义查询
- 作用:mongodb支持js进行筛选,使⽤$where后⾯写⼀个函数, 返回满⾜条件的数据
- 示例:
- db.stu.find({
- $where:function() {
- return this.age>30;}
- })
- 备注:
- Mongodb shell支持js,可以使用$where来定义自定义的查询规则,后面接的是js函数
- this会遍历文档中每一条数据
对查询结果进行处理(筛选、排序、统计)
- 投影
- 作用
- 在查询到的返回结果中, 对查询结果的字段进行筛选
- 命令格式
- db.集合名称.find(<query>,{字段名称:1,...})
- <query>: 查询条件参数, 字典类型数据,{} 表示所有文档数据
- 参数为字段与值, 值为1表示显示,值为0不显
- _id 字段默认的值为1,如果不定义会默认显示_id字段
- 示例:
- db.stu.find({},{_id:0,name:1,gender:1})
- limit与skip
- limit() 方法
- 作用
- ⽤于读取指定数量的⽂档,对查询的结果进行筛选
- 命令格式:
- b.集合名称.find().limit(NUMBER)
- 示例:
- db.stu.find().limit(2)
- skip() 方法
- 作用
- ⽤于跳过指定数量的⽂档
- 命令格式:
- db.集合名称.find().skip(NUMBER)
- 示例:
- db.stu.find().skip(2)
- 备注:
- limit()与skip() 同时使用的时候,先使用skip() 在使用limit( )
- 排序
- 作用
- 对查询的结果集进行排序
- 命令格式
- db.集合名称.find().sort({字段:1,...})
- 参考字段排序,参数1为升序排列
- 参考字段排序,参数-1为降序排列
- 示例
- db.stu.find().sort({gender:-1,age:1})
- 统计个数
- 命令格式
- db.集合名称.find({条件}).count()
- db.集合名称.count({条件})
- 示例:
- db.stu.find({gender:true}).count()
- db.stu.count({age:{$gt:20},gender:true})
- 去重查询
- 命令格式
- db.集合名称.distinct('去重字段',<query>)
- <query>:查询条件参数, 字典类型数据
- 字段表示,根据哪个字段进行去重查询
- 返回的是包含去重后字段值组成的列表
- 示例
- db.stu.distinct('hometown',{age:{$gt:18}})