MongoDB数据库(一)
- 2019 年 10 月 6 日
- 筆記
在爬虫中我们会时常用到mongoDB数据库。mongoDB的优点在于易扩展,高性能,灵活的数据了类型。
安装
安装步骤很简单,就不多说了。
这里推介文章:www.cnblogs.com/tim100/p/6721415.html
mongodb的基础命令
# 查看数据库
show dbs
或者
show databases
# 进入一个数据库 use关键字
例如:use admin
# 查看当前所在数据库
db
# 删除一个数据库
db.dropDatabase()
db代表当前数据库
# 如何创建一个数据库
use test1
就会创建一个test1数据库,当不存在创建,存在就进入数据库。
并且当我们test1中存在数据的时候,show dbs才会显示出这个数据库
mongodb中的数据类型
Object ID:文档ID
String:字符串
Boolean:布尔值,true,false
Integer:整数
Double:浮点值
Arrays:数组或者列表,多个值存储到一个键下
Object:文档
Null:Null值
Timestamp:时间戳
Date:时间
增删改查
在mongodb中是不存在表的概念的,而是把数据存放到集合中。
# 创建一个student数据库,并向stuinfo集合中插入一条数据
use student
db.stuinfo.insert({name:'张三',age:25})
# 查看集合中的数据
db.stuinfo.find()
会输出:
{ "_id" : ObjectId("5c3079c952f446d98cc93ca4"), "name" : "张三", "age" : 25 }
这里的_id和关系型数据库中的主键一样,保证数据的唯一性,是一个16进制
不写_id会自动生成一个,写了就不会。#
# 保存,这里的保存是当不存在_id会创建,存在则会修改
# 当我们执行
db.stuinfo.save({_id:101,name:'小花',age:40})
的时候,_id在上面不存在就会添加上去
# 当我们想修改的时候
db.stuinfo.insert({_id:100,name:'李四',age:111})
即可。而当用insert的时候,_id存在就会报错
更新数据
# 将符合条件的数据更新
db.stuinfo.update({name:'张三'},{name:'小张',sex:'男'})
# 会将name等于张三的一整行数据更新成我们后面填写的数据
# 我们只想更新name需要这样写
db.stuinfo.update({name:'张三'},{$set:{name:'小张'})
修改指定数据需要使用$set来操作。
# 多行修改,上面的修改无论张三有几个,都会只修改一条
# 想修改多条,需要添加一个参数
db.stuinfo.update({name:'张三'},{name:'小张',sex:'男'},{multi:true})
即可,当然我们这里没有多条数据,你可以多添加几条试试。
删除
db.stuinfo.remove({name:'李四'})
# 默认会删除多行
# 只删除一行
db.stuinfo.remove({name:'李四'},{justOne:true})
查询
首先创建一个数据,添加如下数据
use stu
db.stu.insert({name:'小花',sex:'男',age:18,address:'武汉'})
db.stu.insert({name:'小王',sex:'女',age:20,address:'广州'})
db.stu.insert({name:'小赵',sex:'女',age:25,address:'上海'})
db.stu.insert({name:'小陈',sex:'男',age:10,address:'北京'})
db.stu.insert({name:'小杜',sex:'男',age:30,address:'南京'})
db.stu.insert({name:'小二',sex:'女',age:23,address:'深圳'})
# 查询性别为男的
db.stu.find({sex:'男'})
# 改变格式输出
db.stu.find({sex:'男'}).pretty()
# 查询性别为男的只显示一个
db.stu.findOne({sex:'男'})
# 查询年龄为20的
db.stu.find({age:20})
# 比较运算符
小于:$lt
# 查询年龄大于20的
db.stu.find({age:{$lt:20}})
小于等于:$lte
# 查询年龄大于等于20的
db.stu.find({age:{$lte:20}})
大于:$gt
# 查询年龄大于25的
db.stu.find({age:{$gt:25}})
大于等于:$gte
# 查询年龄大于等于25的
db.stu.find({age:{$gte:25}})
不等于:¥ne
# 查询年龄不等于25的
db.stu.find({age:{$ne:25}})
范围运算符
# 查询年龄为18和25的人
db.stu.find({age:{$in:[18,25]}})
# 查询年龄不为18和25的人
db.stu.find({age:{$nin:[18,25]}})
# 多条件查询,年龄为18,并且是在武汉的
db.stu.find({age:18,address:'武汉'})
# 查询年龄为18,或地点在上海的
db.stu.find({$or:[{age:18},{address:'上海'}]})
# 正则表达式查询
# 查询以姓名以小开头的人
db.stu.find({name:/^小/})
或者
db.stu.find({name:{$regex:'^小'}})
# 查询前两行数据
db.stu.find().limit(2)
# 跳过前两行数据
db.stu.find().skip(2)
# 跳过前两行显示两行
db.stu.find().skip(2).limit(2)
# limit和skip组合可以达到分页的效果
# 自定义查询
# 查询年龄等于18的:
db.stu.find({$where:funtion(){return this.age==18}})
# 写法和我们jquery中是一样的。
# 查询年龄为18的name值
db.stu.find({age:18},{name:1})
# 上面还是会显示_id,我们修改成
db.stu.find({age:18},{name:1,_id:0})
# 注意,不想显示_id写成_id:0
# 其他不想显示就不写name:1或age:1,其他字段写成name:0会报错
排序
# 以年龄升序排序
db.stu.find().sort({age:1})
# 以年龄降序排序
db.stu.find().sort({age:-1})
# 多字段排序直接逗号隔开添加就好
# 所有数据只显示name值
db.stu.find({},{name:1,_id:0})
# 查询一共多少行数据
db.stu.find().count()
或者
db.stu.count()
# 查询年龄大于20的有多少数据
db.stu.find({age:{$gt:20}}).count()
或者
db.stu.count({age:{$gt:20})
去重复
# 去除name重复的
db.stu.distinct('name')
# 在年龄大于20的人中去除name重复的
db.stu.distinct('name',{age:{$gt:20}})
数据备份和恢复
这个密令直接在(终端)cmd中输入
备份
mongodump -h 服务器地址 -d 数据库名字 -o 存放的位置
# 在本地就值接不加-h就好了
恢复
mongorestore -h 服务器地址 -d 需要回复的数据库名字 –dir 备份数据库的位置