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

 

posted @ 2019-07-17 20:26  blog_wu  阅读(214)  评论(0)    收藏  举报