Mongodb

介绍

NoSQL 文件型数据库 非关系型
# MySQL     DataBase    Tables          Column      Row
# MongoDB   DataBase    Collections     Field       Documents

MySQL:
id        name        age            sp                wq
1        孙悟空        99999999    null            定海神针
2        沙悟净        9999999        唐僧同款项链    null

MongoDB:
{
    id:1,
    name:孙悟空,
    age:99999999,
    wq: 定海神针,
    ts: 紧箍
    fs: 虎皮裙儿,红丝袜,长筒靴
    hobby:["铁扇公主","紫霞","晶晶"]
    skill:[
        {
            name:"火眼金睛",
            content:"透视"
        },{
            name:"变大小",
            content:"变~~~~~~~~~"
        }
    ]
},
{
    id:2,
    name:沙悟净,
    age:9999999,
    sp: 唐僧同款项链
}
MongDB存储的就是JSON数据

安装

MongDB:
1.默认监听端口是 27017  |  Mysql:3306  | Redis:6379
2.MongoDB 启动  "mongod" 
    指定 MongoDB 数据存储目录 --dbpath="d:/data/db" 
3.连接进入cmd
   mongo

MongoDB命令

数据库和表

1.show databases 查看本地磁盘中的数据库
2.use databasename 切换当前使用的数据库
3.db 查看当前使用的数据库 
4.show tables 查看当前数据库磁盘中的表

# 创建数据库
use 不存在的数据库名 即 在内存中创建该数据库 
# 创建表
db.不存在的表名 即 在数据库中创建该表(内存中)
使用了不存在的对象 即 创建该对象

# 危险操作 之 删除表
# MongoDB.user.drop() 删除表操作 没有确认过程 直接删除

# 危险操作 之 删除库
# MongoDB.dropDatabase() 删除数据库操作 没有确认过程 直接删除

表操作

db.tablename.insert({})
db.user.insert({name:"沙悟净",age:66.666,hobby:[1,2,3,4,5]})
db.user.insert([{},{}])
官方推荐写法 in 3.2:
db.user.insertOne({}) 增加一条数据
db.user.insertMany([{},{}])    批量增加数据

db.tablename.find({查询条件}) 查询所有符合条件的数据
db.user.find({name:"沙悟净"}) 条件查询
db.user.find({name:"沙悟净",age:77}) 并列条件查询

db.user.findOne({}) 查询符合条件的第一条数据 返回JSON数据

$数据比较符
db.user.find({age:{$gt:70}})
$lt        小于
$lte    小于等于
$gt        大于
$gte    大于等于
$eq        等于
$ne        不等于

# 高级查询操作
# $or $and $all $in
res = list(MongoDB.user.find({"$and":[{"name":"Alexander"},{"age":999}]})) # 并列条件
res = list(MongoDB.user.find({"$or":[{"name":123},{"age":999}]})) # 或条件
res = list(MongoDB.user.find({"name":{"$in":[123,222,55,66,7]}}))
$all $in 针对 Array
res = list(MongoDB.user.find({"hobby":{"$in":[0]}}))
res = list(MongoDB.user.find({"hobby":{"$all":[1,7,3,9,0]}})) # 子集查询
print(res)

db.tablename.update() 修改符合条件的第一条数据
# 所有MongoDB的修改全部基于 修改器
# $修改器 关键字

# $关键字:
db.user.updateOne({name:"太白金星","stdent.name":"MPy"},{$set:{"stdent.$.name":"Anyway"}})
db.user.updateOne({name:"太白金星",hobby:"喝酒"},{$set:{"hobby.$":"飙车"}})
$是用来存储符合当前Array条件元素的下标索引
当前Array - ["抽烟","喝酒","剃头"]
条件元素  - {hobby:"喝酒"}
当前Array - 第2个元素符合条件 它的下表索引是 1
当前$ 的值就是 1

如果使用".索引"的方式来操作Array  "字段.索引位置"
官方推荐
db.user.updateOne({},{}) 修改符合条件的第一条数据
db.user.updateMany({},{}) 修改符合条件的所有数据

$set    
db.user.update({age:66.666},{$set:{age:44}})
强制的将某字段值修改
db.user.update({name:"孙大圣"},{$set:{ag18e:18}})
如果该字段不存在即创建该字段并赋值

$unset
db.user.update({name:"孙大圣"},{$unset:{ag18e:1}})
删除字段

$inc
db.user.update({name:"孙大圣"},{$inc:{age:1}})
引用增加 先引用原有数据 在原有数据基础上增加
db.user.update({name:"孙大圣"},{$inc:{age:-1}})
减少
针对 Array List操作
$push == append
db.user.update({name:"孙大圣"},{$push:{hobby:"8"}}) 
在Array类型中增加数据在最末端增加

$pushAll == extends
db.user.update({name:"孙大圣"},{$pushAll:{hobby:[9,10,11,12]}})
在Array类型中增加数据在最末端增加多条数据

$pull == remove()
db.user.update({name:"孙大圣"},{$pull:{hobby:"8"}})
删除所有符合条件的数据

$pullAll
db.user.update({name:"孙大圣"},{$pushAll:{hobby:[9,10,11,12]}})
遍历删除所有符合条件的数据

$pop  ~= pop() 删除Array中第一条或最后一条
db.user.update({name:"孙大圣"},{$pop:{hobby:-1}})
删除第一个数据

db.user.update({name:"孙大圣"},{$pop:{hobby:1}})
删除最后一个数据

db.tablename.remove({查询条件}) 删除符合条件的所有数据
db.user.remove({}) 如果条件为空则删除所有数据 危险!

官方推荐的写法:
db.user.deleteOne({}) # 删除符合条件的第一条数据
db.user.deleteMany({}) # 删除所有符合条件的数据 危险! 如果条件为空则删除所有数据

MongoDB数据类型

https://www.cnblogs.com/DragonFire/p/9135854.html

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类型,时间戳可以秒杀一切时间类型)
    

选取 跳过 排序

排序
    db.user.find({}).sort({age:-1}) 倒序
    db.user.find({}).sort({age:1})    正序
跳过
    db.user.find({}).skip(跳过条目) 跳过
选取
    db.user.find({}).limit(300) 选取300条数据
    如果数据条目小于300 则全部查询
    大于300 则只查询300条

db.user.find({}).sort({age:-1}).skip(1).limit(2)
当3个关键全部出现在一条语句中时,先排序 再跳过 再选取

分页(每页2条数据):
count = 2
page = 1
skip(page-1*count)
db.user.find({}).sort({age:-1}).skip(page-1*count).limit(count) 

1 2 0 1
2 2 2 1
3 2 4 1
4 2 6 1
5 2 8 1

Pymongo

python下安装Pymongo,操作MongoDB

# 开始使用PyMongo 操作MongoDB
# 1.导入PyMongo
import json

from pymongo import MongoClient

MC = MongoClient("127.0.0.1",27017) # 创连接 创建MongoDB客户端
db = MC["S22"] # 选择或创建数据库 (内存)

player_info = {
    "nickname":"钱雨",
    "atc":5,
    "def":99,
    "hp":500,
    "skill":[
        {
            "name":"铁头功",
            "def":50
        },
        {
            "name":"见义勇为",
            "hp":999
        }
    ]
}
# 增加数据
# res = db.player.insert_one(player_info)
# print(res.inserted_id,type(res.inserted_id)) 当前新增数据的 ObjectId
# res = db.player.insert_many([player_info])
# print(res.inserted_ids) # 当前新增数据们的 Object
# class 'bson.objectid.ObjectId' 不能被JSON序列化 但是 可以转成字符串


# 查询数据
# res = db.player.find({})
# for i in res:
#     print(i)
# res = db.player.find_one({"nickname":"钱雨"}) # 查询符合条件的第一条数据
# print(res)
# res = db.player.find_one({"nickname":"钱雨","def":{"$gt":80}}) # 查询符合条件的第一条数据
# print(res)
# res["_id"] = str(res.get("_id")) # ObjectId 不能被 JSON 序列化 转换成字符串即可
# res_json = json.dumps(res)
# print(res_json)

# 更新数据 update
# res = db.player.update_one({"nickname":"程根"},{"$set":{"hp":350}})
# print(res)
# db.player.update_many({},{"$inc":{"atc":20}})

# 删除数据
# from bson.objectid import ObjectId
# res = db.player.delete_one({"_id":ObjectId("5d902bca19ccfed36f87e62f")})
# print(res.deleted_count)

# 排序 选取 跳过
# from pymongo import ASCENDING,DESCENDING
# res = db.player.find({}).limit(2).skip(2).sort("_id",DESCENDING)
# for i in res:
#     print(i)

Flask下的MongoDB

from flask import Flask, request, render_template, jsonify
from setting import MongoDB

app = Flask(__name__)

@app.route("/reg",methods=["POST","gET"])
def reg():
    if request.method == "GET":
        return render_template("reg.html")
    else:
        user_info = request.form.to_dict()
        res = MongoDB.user.insert_one(user_info)
        if res.inserted_id:
            return "注册成功"
        else:
            return "注册失败"

@app.route("/login",methods=["POST","gET"])
def login():
    if request.method == "GET":
        return render_template("login.html")
    else:
        user_info = request.form.to_dict()
        user_info_dict = MongoDB.user.find_one(user_info)

        user_info_dict["_id"] = str(user_info_dict["_id"])

        return jsonify(user_info_dict)

if __name__ == '__main__':
    app.run("0.0.0.0",9527)
原文地址:https://www.cnblogs.com/Pythonzrq/p/13254641.html