mongodb

NoSQL - MongoDB文件型数据库
文件型 - MongoDB

User:
[
{id:1,name:"蔡文姬",age:16,gender:""},
{id:2,name:"嫦娥",age:16,gender:""},
{
id:3,name:"孙悟空",age:16,gender:""},
{id:"",name:123,age:"十六",gender:1,hobby:["篮球","于谦","羽毛球","双色球”]}
] 4 ""
操作简单方便易懂 更加接近程序员操作 原生语法ORM
因为是非关系型数据库,没有结构限制,扩展性很强

关系型(拉里埃里森) - MySQL MSSQL(SQLServer微软,Windows) Sybase ORCAL(MySQL) DB2+AUX(IBM)
MySQL MS - MySQL Ux
User:
ID name age gender hobby
1 蔡文姬 16 女 null
2 嫦娥 9999 女 null
3 孙悟空 8888 男 null
四    (不行)

端口号

Redis 6379
MYSQL 3306
MongoDB 27017

1.安装 MongoDB
配置环境变量 - Path :MongoDB/bin/mongod.exe
CMD -
mongod 启动命令
Mongod  --dbpath    数据库存放路径(数据库存放路径必须存在)
27017 MongoDB的默认端口
mongo 开启客户端 默认连接地址是本机


2.基本操作命令
db -- 当前使用的数据库 查看名称,代指当前使用的数据库
show databases -- 查看当前服务器磁盘上的所有数据库
use dbname -- 切换当前使用的数据库 或者在内存中创建一个新的数据库 赋值给 db
show tables -- 查看当前数据库中所有磁盘中的表
db.tablename -- 使用当前数据库中的tablename表 在内存中创建表

使用不存在的对象即创建该对象

3.增删改查

db.tablename.insert({name:"123"}) #在磁盘中写入数据{name:"123"}
db.tablename.insert([{name:"123"},{name:"123"}]) #在磁盘中写入多条数据

db.tablename.find({查询条件}) # 查询所有符合条件的数据
db.tablename.find({name:"345"}) # 查询符合{name:"345"}的所有数据

db.tablename.update({查询条件},{$修改器:{修改属性}})
# 根据查询条件,修改符合条件的第一条数据
修改器:认定当前修改的类型 $set设置类型修改器 强制修改某字段的值
db.tablename.update({name:"345"},{$set:{name:789}})
db.tablename.update({name:"123"},{$set:{gender:1}}) 符合不存在即创建的原则

db.tablename.remove({查询条件}) # 删除所有符合条件的数据

删除表格 - db.tablename.drop()
删除库 - db.dropDatabase()

4.MongoDB 数据类型
MYSQL MongoDB 口语
database database 数据库
tables Collections 表儿
column Field 列
row Document 数据 一条数据


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


5.$数学比较符
$lt 小于
$lte 小于等于
$gt 大于
$gte 大于等于
$eq : 等于
$ne 不等于


6.$修改器 + $ 字符特殊用法       ($)
针对单个字段的操作:
$set 修改某个字段的值 db.stu.update({age:20},{$set:{name:"绿绿",gender:1}})
$unset 删除字段 db.stu.update({name:"小黑"},{ $unset: { newField:1 } })
$inc 引用增加 先引用 后增加 db.stu.update({},{$inc:{age:-1}})
针对 Array == list 操作
$push == append()

在Array的最后一个位置中增加数据
db.stu.update({name:"小黑"},{ $push: { hoobys:"渣男" } })

$pushAll == extend()
db.stu.update({name:"小黑"},
{$pushAll: {"hoobys":[1,2,3,5]}},
)

$pullAll
db.stu.update({name:"小黑"},
{$pullAll: {"hoobys":[1,2,3,5]}},
)

$pull == remove()
删除Array中的指定元素
db.stu.update({name:"小黑"},{ $pull: { hoobys:"渣男" } })

$pop (=) pop()
删除Array中的第一个或者最后一个元素 正数是倒序删除 负数是正序删除
db.stu.update({name:"小黑"},{ $pop: { hoobys:1 } })

$ 字符特殊用法
存储当前(Array)符合条件的元素下标索引 ,只能存储最外层的 索引位置
例子:hobbys中等于5的元素改为 "五"
先查询到hobbys中5的 位置(2) ,将位置存储在 $==(2) 字符中 然后根据$字符的位置(2)更改数据
db.stu.update({"hoobys":5},{ $set: {"hoobys.$":"五"} })

Object操作:
db.stu.update({name:"小黑"},{ $set: { "hobby.烫头":"锡纸" } })

Array + Object

7.sort  skip limit

pycharm  操作

import json

from bson import ObjectId
from pymongo import MongoClient
# from pymongo.cursor import Cursor

m_client = MongoClient("127.0.0.1",27017)

mdb = m_client["S20"]

#
# 增加数据时 res.inserted_id or inserted_ids
# 都是 ObjectId不是字符串
# res = mdb.user.insert_one({)
# print(res.inserted_id)  # 5d2ed8f865d6b8f1c494ff78
# res = mdb.user.insert_many([{"name":"小黑"},{"name":"小二B"}])
# print(res.inserted_ids)

# 查:
# res = list(mdb.user.find({}))
# print(res)
# res_list = []
#
# for user in res:
#     user["_id"] = str(user.get("_id"))
#     res_list.append(user)
#
# res_json = json.dumps(res_list)
# print(res_json)


# res = list(mdb.user.find({}))
# print(res)
#
# for index,user in enumerate(res):
#     res[index]["_id"] = str(user.get("_id"))
#
# res_json = json.dumps(res)
# print(res_json)


# res = mdb.user.find_one({"name":"小黑"})
# res = mdb.user.find_one({"_id":ObjectId("5d2ed96e38887b85450ed6d8")})
# res["_id"] = str(res.get("_id"))
# print(res,str(res.get("_id")))
# res_json = json.dumps(res)
# print(res_json)


# 修改数据
# res = mdb.user.update_one({"name":"小二B"},{"$set":{"name":"A_C"}})
# print(res.modified_count)
#
# user = mdb.user.find_one({"name":"A_C"})
# user["gender"] = 1
# user["age"] = 99
# user["name"] = "小二A_C"
# user["hobby"] = ["choyan","hj","xzt"]
#
# res = mdb.user.update_one({"name":"A_C"},{"$set":user})

# user = mdb.user.find_one({"name":"小二A_C"})
# user["hobby"].append("洗头")
# user["hobby"].remove("hj")
#
# mdb.user.update_one({"name":"小二A_C"},{"$set":{"hobby":user.get("hobby")}})


# 删除
# res = mdb.user.delete_one({})
# print(res.deleted_count)

import pymongo
# 排序 + skip + limit
# res = list(mdb.stu.find().sort("age",pymongo.DESCENDING))
# res = list(mdb.stu.find().skip(2))
# res = list(mdb.stu.find().limit(2))
# for s in res:
#     print(s)

# 分页
# res = list(mdb.stu.find().sort("age",pymongo.ASCENDING).limit(2).skip(4))
# print(res)
原文地址:https://www.cnblogs.com/qj696/p/11205826.html