mongodb数据库介绍

1:windos系统安装mongodb

2:什么是mongodb

  • 1:是一个数据库;
  • 2:是一个非关系型的数据库,文档数数据库

3:为什么学习mongodb

3.1:企业需求

  • 要求爬虫开发工程师一定要会这个技术

3.2:爬虫需求

  • 爬虫的数据如果上了一个星级,使用mongodb会比使用mysql好很多,主要是因为mysql的操作太过于麻烦了
  • scrapy-redist:scrapy中的一个插件,但适用性差,并不是所有的公司都要去会使用分布式,所以这个可以不用重点学习

3.3:mongodb的特点

  • 1:无数据结构方便做爬虫
  • 2:高性能,具有非常高的读写性能
  • 3:良好的支持,具有完善的文档,跨平台性良好,具有高的稳定性

4:mongodb的命令

  • 主要介绍一些常用的命令

4.1:基本命令

展示数据库

show dbs
  • 效果
    查看数据库

清屏

cls
  • 效果
    清屏

使用数据库/创建数据库

use 要使用/要创建的数据库
  • 效果
    使用/创建数据库
  • 注意:这个时候创建的数据库还是创建在内存当中的,这个时候还是没有数据的,只有在硬盘中的数据才可以使用show dbs来查看

查看现在用的数据库

db
  • 效果
    查看现在使用的数据库

查看当前使用数据库的集合(表)

show collections / show tables  
  • 效果
    查看现在使用数据库中的表/集合

删除数据库

db.dropDatabase()
  • 注意:
    • 要跳转到这个数据库当中才可以删除数据库可以使用use命令跳转到需要删除的数据库
  • 效果
    删除数据库

4.2:插入数据

不手动创建表

  • 注意:当没有这个表的时候 我们插入一条数据 这个表自动被创建出来了,当有这个表的时候,就会在这个表中插入数据
db.jerry.insert({x:1})
  • 效果
    插入数据

手动创建表

db.createCollection('name', {capped:true, size:4})
  • 参数解释:

    • name: 表名
    • capped:默认为False 不设置上限,True 就是有上限
    • size:表示设置上限的大小,单位是字节,但是如果设置的容量大小小于256个字节,就默认是256个字节
  • 注意:如果添加的数据超过了我们设置的上限,就会从开始覆盖数据

  • 效果
    手动插入表

  • 注意:这个命令只是创建一个表而已,在表中没有任何的数据,要想插入数据还要使用插入命令

查看一个表/集合是否设置了上限

db.jerry1.isCapped() 
  • 注意
    • jerry:表名;
    • 返回值fales没有上限 ;true有上限
  • 效果
    查看一个表/集合是否设置了上限

在表中插入数据

db.jerry.insert({x:1})
  • 效果
    在表中插入数据
  • 注意
    • 插入的数据可以是重复的,但是可以通过id来分辨是不是为同一个数据
    • 当没有这个表的时候,会先创建这个表,再插入数据,当有这个表的时候,会直接在这个表中插入数据

删除表/集合

db.jerry_collection.drop() 
  • 效果
    删除表

插入多条数据

db.jerry2.insert([{name:'jerry',age:18,gender:'male'},{name:'juran'}])
  • 注意:
    • 记住要用到[]
    • 每个不同的数据使用“,”分割
  • 效果
    插入多条数据

使用循环插入多条数据(*)

  • 带*的不要求掌握
for(i=3;i<10;i++)db.jerry3.insert({x:i}) 

​- 效果
使用循环插入多条数据

更新已经有的数据

  • 更改已经有的数据
db.jerry3.save({_id:ObjectId("60d08f386bd683f7c417e0ac"),name:'jerry',gengder:'male'})
  • 效果
    更新数据

  • 注意:更新数据的“_id”一定要一样

  • 插入新的数据

db.jerry3.save({name:'jerry',gender:'male'})
  • 效果
    插入新的数据
  • 注意:指定了id 然后就找到这条记录做更新,反之就插入

4.3:查询数据

查询所有数据

db.name.find()
  • name:要查询的表/集合的名字
  • 效果
    查询所有数据

格式化打印

db.stu.find().pretty()
  • 效果
    格式化打印

精确车查询

  • 在db.name.find(),的括号中可以添加数据来实现精确查询
db.stu.find({name:'jerry'})
  • 效果
    精准查询

格式化打印精确查询的数据

db.stu.find({name:'jerry'}).pretty()
  • 效果
    格式化打印精确查找的数据

返回满足条件的第一条数据

  • 1:无筛选条件的时候
db.stu.findone()
  • 效果
    返回第一条符合条件的数据
  • 2:有筛选条件的时候
db.stu.findOne({age:18})
  • 效果
    返回有筛选要求的第一条数据

多条件查找

db.stu.find({age:18,homtown:'广州'})
  • 效果
    多条件查找

返回一个范围的数据

db.stu.find({age:{$gt:18}})
  • 效果
    返回年龄大于18的数据
  • 运算符
    • 等于:默认是等于判断,没有运算符
    • 小于:$lt
    • 小于等于:$lte
    • 大于:$gt
    • 大于等于:$gte

返回多条件的范围数据

db.stu.find({age:{$gt:18},hometown:'长沙'})
  • 效果
    返回多条件的返回值

或查询

  • 语法:
    • or:使用$or,值为数组,数组中每个元素为json,Mongodb默认为and
    • db.jerry_collection.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: or:[{age:{gt:18}},{gender:false}]})
db.stu.find({$or:[{age:{$gt:18}},{gender:false}]})
  • 效果
    或查找

自定义查询

db.stu.find({$where:function(){return this.age>18}})
  • 查询年龄大于18,这个比较灵活,可以在函数中改变查询的条件
  • 效果
    自定义查询

范围查询

db.stu.find({age:{$in:[18,28]}})
  • 返回年龄在18-28范围中的数据
  • 效果
    范围查询

4.4:操作查询结果

返回查询结果的数量

  • 1:无条件的查询
db.stu.find().count()
  • 效果
    返回符合数据的个数
  • 2:有条件的查询
db.stu.find({age:18}).count()
  • 效果
    返回有条件的数据个数

limit和skip

  • 定义:
limit用于读取指定数量的前n个文档
db.stu.find().limit(n)

skip用于跳过指定数量n的文档
db.stu.skip(n)

limit和skip同时使用,先跳过两个返回的数据,在获取跳过数据的前两个数据
db.stu.find().skip(2).limit(2)
  • 效果
    limit和skip的使用

映射

  • 指定返回的字段,如果为1返回该字段
db.stu.find({},{age:1})
  • 效果
    映射字段

  • 注意

    • 1:当要隐藏"_id"的时候,需要把"_id":0(映射为0)
    • 2:可以有多个映射,每个映射之间用,分割
    • 3:注意:在find()中的第一个空的花括号

排序

db.stu.find().sort({age:-1})		# 注意:age:1为升序,age:-1为降序
  • 效果
    排序
  • 注意:排序要是可以比较的元素

加条件的排序

db.stu.find({gender:true}).sort({age:-1})
  • 效果
    有条件的排序

4.5:修改数据

更新数据

  • 1:全部更新
    • 正常的更新,但是后面的数据不会保留
db.集合名称.update({query}, {update}, {multi: boolean})
  • 参数名称
    • 参数query:查询条件
    • 参数update:更新操作符
    • 参数multi:可选,默认是false,表示只更新找到的第一条数据,值为true表示把满足条件的数据全部更新
  • 效果
    全部更新一个数据
  • 部分更新
    • 指定键值的更新 保留后面的数据
db.stu.update({nmae:'张三'},{$set:{name:'李四'}})
  • 效果
    部分更新一个数据
  • 更新全部的数据
db.stu.update({},{$set:{gender:0}},{multi:true})
  • 效果
    更新所有的数据

删除数据

  • 1:删除符合条件的第一个数据
db.stu.remove({age:18},{justOne:true})
  • 效果
    删除符合要求的第一个数据
  • 2:删除前两个数据
db.stu.remove({age:18},{justTwo:true})
  • 效果
    删除符合数据的前两个数据
  • 另:别的删除也没有试过,可以试一下
  • 3:删除表中的所有数据
db.stu.remove({})
  • 效果
    删除表中所有数据
  • 4:删除表
db.stu.drop()
  • 效果
    删除表

5:题目

测试数据

var persons = [{
	name:"jim",
	age:25,
	email:"75431457@qq.com",
	c:89,m:96,e:87,
	country:"USA",
	books:["JS","C++","EXTJS","MONGODB"]
},
{
	name:"tom",
	age:25,
	email:"214557457@qq.com",
	c:75,m:66,e:97,
	country:"USA",
	books:["PHP","JAVA","EXTJS","C++"]
},
{
	name:"lili",
	age:26,
	email:"344521457@qq.com",
	c:75,m:63,e:97,
	country:"USA",
	books:["JS","JAVA","C#","MONGODB"]
},
{
	name:"zhangsan",
	age:27,
	email:"2145567457@qq.com",
	c:89,m:86,e:67,
	country:"China",
	books:["JS","JAVA","EXTJS","MONGODB"]
},
{
	name:"lisi",
	age:26,
	email:"274521457@qq.com",
	c:53,m:96,e:83,
	country:"China",
	books:["JS","C#","PHP","MONGODB"]
},
{
	name:"wangwu",
	age:27,
	email:"65621457@qq.com",
	c:45,m:65,e:99,
	country:"China",
	books:["JS","JAVA","C++","MONGODB"]
},
{
	name:"zhaoliu",
	age:27,
	email:"214521457@qq.com",
	c:99,m:96,e:97,
	country:"China",
	books:["JS","JAVA","EXTJS","PHP"]
},
{
	name:"piaoyingjun",
	age:26,
	email:"piaoyingjun@uspcat.com",
	c:39,m:54,e:53,
	country:"Korea",
	books:["JS","C#","EXTJS","MONGODB"]
},
{
	name:"lizhenxian",
	age:27,
	email:"lizhenxian@uspcat.com",
	c:35,m:56,e:47,
	country:"Korea",
	books:["JS","JAVA","EXTJS","MONGODB"]
},
{
	name:"lixiaoli",
	age:21,
	email:"lixiaoli@uspcat.com",
	c:36,m:86,e:32,
	country:"Korea",
	books:["JS","JAVA","PHP","MONGODB"]
},
{
	name:"zhangsuying",
	age:22,
	email:"zhangsuying@uspcat.com",
	c:45,m:63,e:77,
	country:"Korea",
	books:["JS","JAVA","C#","MONGODB"]
}]

for(var i = 0;i<persons.length;i++){
	db.persons.insert(persons[i])
}

var persons = db.persons.find({name:"jim"})
while(persons.hasNext()){
	obj = persons.next();
        print(obj.books.length)
}

题目

  • 1.查询年龄大于25小于27的name,age

  • 答案:db.persons.find({age:{$gt25,$lt27}},{name:1,age:1})

  • 效果
    1:答案

  • 2.查询出不是美国的name

  • 答案:``````

  • 效果
    第二题答案

  • 3.查询国籍是中国或者美国的学生信息

  • 答案:db.persons.find({$or:[{country:'USA'},{country:'China'}]})

  • 效果
    第三题答案

  • 4.查询语文成绩大于85或者英语成绩大于90的学生信息

  • 答案:db.persons.find({$or:[{c:{$gt:85}},{e:{$gt:90}}]})

  • 效果
    第四题答案

  • 5.查询出名字中存在"li"的学生信息

  • 答案:db.persons.find({name:/li/},{name:1})

  • 效果
    第五题答案

  • 6.查询喜欢看MONGODB和PHP的学生

  • 答案:db.persons.find({books:{$all:['MONGODB','PHP']}},{books:1})

  • 效果
    第六题答案

  • 7.查询第二本书是JAVA的学生信息

  • 答案:db.persons.find({'books.1':'JAVA'},{books:1})

  • 效果
    第七题答案

  • 8.查询喜欢的书数量是4本的学生

  • 答案:db.persons.find({books:{$size:4}},{books:1})

  • 效果
    第八题答案

  • 9.查询出persons中的国家分别是什么

  • 答案:db.persons.distinct('country')

  • 效果
    第九题答案

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值