MongoDB
初识MongoDB
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
NoSQL - MongoDB文件型数据库
操作简单方便易懂 更加接近程序员操作 原生语法ORM
因为是非关系型数据库,没有结构限制,扩展性很强
关系型(拉里埃里森) - MySQL MSSQL(SQLServer微软,Windows) Sybase ORCAL(MySQL) DB2+AUX(IBM)
安装 MongoDB
地址:https://www.mongodb.com/download-center/community
安装后需要配置环境变量 - Path :D:\Program Files\MongoDB\Server\3.4\bin
CMD - mongod 启动命令 --dbpath 数据库存放路径(数据库存放路径必须存在) mongod --dbpath D:\Mongod\data\db 27017 MongoDB的默认端口 mongo 开启客户端 默认连接地址是本机 C:\Windows\system32>mongo > db > use user > db.user
基本操作命令
db -- 当前使用的数据库 查看名称,代指当前使用的数据库 show databases -- 查看当前服务器磁盘上的所有数据库 use dbname -- 切换当前使用的数据库 或者在内存中创建一个新的数据库 赋值给 db show tables -- 查看当前数据库中所有磁盘中的表 db.tablename -- 使用当前数据库中的tablename表 在内存中创建表 使用不存在的对象即创建该对象
======================================
数据库 端口 Redis 6379 MYSQL 3306 MongoDB 27017
======================================
增删改查
增(官方不推荐)
db.tablename.insert({name:"123"}) #在磁盘中写入数据{name:"123"} db.tablename.insert([{name:"123"},{name:"456"}]) #在磁盘中写入多条数据
!!! 官方推荐
insertedId = db.tablename.insertOne({name:"123"}) insertedIds = db.tablename.insertMany([{name:123},{name:456}]) # insertedId 是增加数据的_id ObjectId # insertedIds 是增加数据的_id ObjectId 列表 [ObjectId(),ObjectId()]
查
db.tablename.find({查询条件}) # 查询所有符合条件的数据 db.tablename.find({name:"345"}) # 查询符合{name:"345"}的所有数据
官方在3.2版本中加入了新的写法
res = db.tablename.findOne({查询条件}) # 查询符合条件的第一条数据
改(有官方推荐)
db.tablename.update({查询条件},{$修改器:{修改属性}}) # 根据查询条件,修改符合条件的第一条数据 修改器:认定当前修改的类型 $set设置类型修改器 强制修改某字段的值 db.tablename.update({name:"123"},{$set:{name:456}}) db.tablename.update({name:"123"},{$set:{gender:1}}) 符合不存在即创建的原则
!!! 官方推荐 (3.2之后)
db.tablename.updateOne({name:"345"},{$set:{name:789}}) 根据查询条件,修改符合条件的第一条数据 db.tablename.updateMany({name:"345"},{$set:{name:789}})根据查询条件,修改所有符合条件的数据
删(官方不再推荐使用)
db.tablename.remove({查询条件}) # 删除所有符合条件的数据
!!! 官方推荐 (3.2之后)
db.tablename.deleteOne() # 删除符合条件的第一条数据
db.tablename.deleteMany() # 删除所有符合条件的数据
MongoDB 数据类型及相关操作
对比MYSQL看下
========================================================
MYSQL MongoDB 口语 database database 数据库 tables Collections 表 column Field 列 row Document 数据(一条数据)
========================================================
MongoDB的数据类型详细介绍:
ObjectID :Documents 自生成的 _id String: 字符串,必须是utf-8 Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写) Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32) Double:浮点数 (没有float类型,所有小数都是Double) Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦) Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典 Null:空数据类型 , 一个特殊的概念,None Null Timestamp:时间戳 Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)
$数学比较符
$lt 小于
$lte 小于等于
$gt 大于
$gte 大于等于
$eq : 等于
$ne 不等于
$修改器 + $ 字符特殊用法
针对单个字段的操作: $set 修改某个字段的值 db.stu.update({age:20},{$set:{name:"绿绿",gender:1}})
$unset 删除字段的值 db.stu.update({name:"小黑"},{ $unset: { newField:1 } })
$inc 引用增加 先引用 后增加 (比如年龄每年增加1) db.stu.update({},{$inc:{age:-1}}) # 1是增加1,-1是减少
针对 Array == list 操作: $push == append() db.user.update({name:"wu"},{ $push: { hoobys:"唱歌" } }) # 追加数据 $pushAll == extend() db.user.update({name:"wu"},{ $pushAll: { hoobys:[1,2,3,4]} }) # 批量增加 $pull == remove() db.user.update({name:"wu"},{ $pull: { hoobys:"唱歌" } }) # 删除指定元素
$pullAll
db.user.update({name:"wu"},{ $pullAll: { hoobys:[1,2,3,4]} }) # 批量删除
$pop 约等于 pop()
db.user.update({name:"wu"},{ $pop: { hoobys:1 } })
$ 字符特殊用法 存储当前(Array)符合条件的元素下标索引 ,只能存储最外层的 索引位置 例子:hobbys中等于3的元素改为 "三" 先查询到hobbys中3的 位置(2),将位置存储在 $==(2) 字符中 然后根据$字符的位置(2)更改数据 db.user.update({"hoobys":3},{ $set: {"hoobys.$":"三"} })
Object操作: db.user.update({name:"wu"},{ $set: { "hobby.烫头":"锡纸" } })
查询关键字
并列查询 $and db.tablename.find({name:"345",age:1}) db.stu.find({$and: [{name:"绿绿"},{age:20}]}) 或条件查询 $or db.stu.find({$or:[{name:"绿绿"},{name:"小黑"}]}) 子集查询 $all db.stu.find({"user_list":{$all:["dashabi","alex"]}}) 范围查询 $in db.stu.find({name:{$in:["绿绿","黑黑","小红","小黑"]}})
排序 + 选取 + 跳过
排序:sort db.stu.find().sort({ age:1 }) 1正序 -1倒序 选取:limit db.stu.find().limit(2) 选取两条数据 跳过:skip db.stu.find().skip(2) 跳过前两条数据 选择中间两条 or 跳过前N条 db.stu.find().skip(0).limit(2).sort({ age:-1 }) 先排序 - 跳过 - 选取 var page = 1 var num = 2 var sk = (page-1) * num db.stu.find().skip(sk).limit(num).sort({ age:-1 })
# 和顺序无关
Python 操作 MongoDB
安装pymongo
pip install pymongo
具体操作:
from pymongo import MongoClient my_client = MongoClient("127.0.0.1", 27017) my_db = my_client['day93'] # 第一种增加insert_one res = my_db.user.insert_one({"name": "小黑"}) print(res.inserted_id) # 多条数据insert_many res = my_db.user.insert_many([{"name": "alex"}, {"name": "wusir"}]) print(res.inserted_ids) # list查看所有信息 res = list(my_db.user.find({})) print(res) # 循环查询 res = my_db.user.find({}) for user in res: print(user) # 改数据update_one res = my_db.user.update_one({"name": "eva"}, {"$set": {"name": "baoyuan"}}) print(res.modified_count) # 利用python字典特性,增加数据,更改数据 user = my_db.user.find_one({"name": "alex"}) print(user, type(user)) user['name'] = "taibai" user['age'] = 18 user['hobby'] = "烫头" res = my_db.user.update_one({"name": "baoyuan"}, {"$set": user}) print(res.modified_count) # 删除多条 res = my_db.user.delete_many({"age": {'$in': ['20', '22']}}) print(res.deleted_count) # 查询出的内容JSON序列化 import json res = my_db.user.find({}) res_list = list(res) print(res_list) for index, user in enumerate(res_list): res_list[index]['_id'] = str(user.get("_id")) json_str = json.dumps(res_list) print(json_str)
具体参考:https://www.runoob.com/python3/python-mongodb.html