一、简单介绍MongoDB数据库与Mysql区别
1.MySQL是一个基于表格设计的关系数据库;而NoSQL本质上是非关系型的基于文档的设计。
2.MySQL中使用的标准语言是SQL;而NoSQL中缺乏标准的查询语言。
MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON)。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
补充json:
Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:
json.dumps(): 对数据进行编码。
json.loads(): 对数据进行解码。
在 json 的编解码过程中,Python 的原始类型与 json 类型会相互转换。
如果你要处理的是文件而不是字符串,你可以使用 json.dump()
和 json.load()
来编码和解码JSON数据。
代表着在原始类型中的字典,是json格式中的对象;在原始类型中的列表,是json中的数组,呈一种对应转换关系。
二、下载MongoDB数据库
之所以下载安装MongoDB,目的是和Mysql一样,可以通过Python进行数据库操作。
官网地址:https://www.mongodb.com/try#community
三、安装Mongo DB
双击安装包,按照下图,一步步来。
注意:
这里的安装路径要牢记D:\CodeAPP\MongoDB\Server\4.0
下面这个图箭头标错了,选择next。
四、配置
1.新建
首先安装完毕之后的路径下的文件夹是这样的:
我们需要两个文件用来存放数据库和日志。在data文件夹下建立一个名为 db 的文件夹用来放数据库,在log文件夹下新建一个名为mongodb.log的文件用来存放日志。
2.配置环境变量
将 MongoDB 安装目录下的 bin 目录添加到环境变量 Path 中:
;D:\CodeAPP\MongoDB\Server\4.0\bin
进入cmd,检验环境变量是否加入成功:
3.配置启动服务
以管理员身份运行cmd,进入mongoDB所在的安装目录下D:\CodeAPP\MongoDB\Server\4.0\bin
,输入以下代码进行配置。
mongod --logpath "D:\CodeAPP\MongoDB\Server\4.0\log\mongodb.log" --logappend --dbpath "D:\CodeAPP\MongoDB\Server\4.0\bin\data\db" --directoryperdb --install
打开浏览器访问 http://localhost:27017
出现下列显示说明环境可以连接。
4.启动服务
以管理员身份运行cmd,进入mongoDB所在的安装目录下,输入启动命令net start MongoDB
。
由于在之前的安装过程中我们没有下载可视化工具,所以这里看不到,但是我们也可以再单独下载可视化工具便于使用,官网上下载地址MongoDB的可视化工具。
再次继续输入mongo
命令即可进入MongoDB的cmd操作环境。
还有其他一些命令,比如关闭服务net stop MongoDB
。
还有其他的数据操作命令。
在这里补充点数据命令:
db
显示当前的数据库名称
show dbs
显示当前服务器下数据库(非空的数据库)列表
use test
如果test数据库不存在,则创建test数据库
如果test已存在,则切换到test数据库
show collections
显示当前数据库下所包含的集合(表)列表
db.users.insert({name:'zhangsha'})
向users集合中插入数据
如果users集合存在,则直接插入数据,如果不存在,则创建users集合再插入数据
db.createCollection('products')
创建一个空集合products
db.products.insert([{name:'lishi'},{name:'wangwu'}])
一次插入多个数据
db.products.find()
查询products集合中所有的数据
db.products.find({name:'苹果手机'})
查询stu集合中name='苹果手机'的数据
db.products.find({name:{$eq:'苹果手机'}})
同上,$eq=>等号,建议使用上面的方式,易记,易输入
eq = equal
db.products.find({price:{$gt:18}})
查询stu集合中age>18的数据
把$gt换成如下的符号试试:
$gt=>大于 great
$gte=>大于等于 great equal
$lt=>小于 less than
$lte=>小于等于 less than equal
$ne=>不等于 not equal
$in=>在范围内
$nin=>不在范围内
以上几个符号格式总结为:{ field: {符号: value}}
db.products.find({name:/^华为/})
查找stu集合中name域中以“华为”字符的开头的数据
db.products.find({name:{$in:['手机1','手机2']}})
查询stu集合中name='手机1'和name='手机2'的数据
$in=>在范围内
$nin=>不在范围内
以上两个符号格式为:{ field:{符号:[value1,value2,....]}}
db.products.find({name:"华为手机",price:800})
查找name="华为手机"并且price:800的数据
db.products.find({$or:[{name:'华为手机'},{price:{$lt:1000}}]})
查询products集合中name='华为手机' 或者 price<1000的数据
$or=>或者 注意$or:[{},{},....]
$and=>并且 格式同$or, 例:{$and:[{},{},....]}
$nor=>not or 与$or相反, 格式同$or
db.products.find({price:{$not:{$gt:100}}})
查询products集合中price<=100的数据,不存在price属性的数据也会查询出来
$not=>取反
db.products.find({price:{$exists: true}})
查询products集合中包含域名称为price的数据
db.products.find({name:{$type:2}})
查询products集合中name属性为字符串类型的数据
db.products.find({
$where: function(){
return this.name == '华为手机'
}
})
查询products集合中name='华为手机’的数据
db.products.find({
$where: function(){
return this.name.indexOf('华为手机') > -1;
}
})
查询products集合中name域中包含“华为手机”字符的数据
db.products.update({name:'华为手机'},{$set:{price:2000}},{
upsert: true,
multi:false
})
把products集合中name='华为手机'的那条数据,把price属性设置成2000,其它属性保留
$set是指更改的属性列表,不在列表中其他属性会被保留,如果不加此符号,其它属性会被丢弃(_id属性比较特殊,不会丢失)
upsert:true如果没有符号条件的更新时,则插入一条,为false时,则不会插入, 默认是false
multi:false一次只能更新一条数据,为true时,可更新多条,默认是false
db.students.remove({})
清空集合students
db.products.remove({name:'abc'})
删除products集合中name='abc'的数据,注意,即使把集合products中的所有数据都删除了
products集合仍然存在, remove()是用来删除数据的,而drop()不仅会删除数据,还会把
集合的结构给删除
db.products.drop()
把stu集合彻底从当前数据中删除,集合stu不再存在,注意与remove()的区别
db.dropDatabase()
删除当前数据库
db.users.distinct('name')
查询users集合中不重复的name属性,返回的是数组
db.stu.count({name:'zhangshan'})
查询stu集合中name='zhangshan'的数据数量
db.stu.find().limit(5)
查询stu集合中前5条数据
db.stu.find().skip(5)
查询stu集合中跳过前5条后的数据
db.stu.find().sort({name:1})
查询stu集合中的全部数据,并按name属性正序排列 注:1:正序 -1: 倒序
由于mongodb的api接口方法很多,除以上命令外,其他的命令请多看官方文档
要求:根据官方文档中的方法原型,能够操作相应的方法