了解MongoDB并在python中使用

 

1. MongoDB 概念

基于分布式文件存储的数据库,json类型数据,不需要转换效率更高

mysql 和MongoDB 的区别

 

 

2. NoSQLBooster for MongoDB (下载它,并在上面使用)

show dbs 查看所有数据库(已创建在磁盘上的)
db 当前使用数据库
use db 切换数据库
show tables 查看当前db下的所有数据(表)

db.user_info.find() 查看表数据

# 比较符
$gt    大于
$gte   大于等于
$lt    小于
$lte   小于等于
$eq    等于  # 当=号没办法用时,用这个

# 查询关键字
db.table.find({},{})   # 逗号就是and
db.table.find({$or:[{name:"xxx"},{age:99}]})   $or    等于
db.table.find({"name":{$in:["xxx","yyy"]}})    $in    存在
db.table.find({"name":{$all:[0251]}})               $all   不输入则没有,但凡有一个没出现在里面,则没有(交集),子集则全部拿出来

db.user_info.insert({})
# WriteResult({ "nInserted" : 1 })
# db.user_info.insert({is_dict:{"name":"ywd", "age":73, "hobby":["alex","lj"]})  还有is_list、is_null
# 官方推荐的插入方式
db.user_info.insertOne({})
db.user_info.insertMany({})

db.user_info.update({},{$set:{name:"yinwang"}})  # 修改数据

# 官方推荐写法,没有则添加
db.user_info.updateOne({age:22},{$set:{name:"yinwang"}})  # 前面是查询条件,后面是修改条件
db.user_info.updateMany({age:{$gt:0}},{$set:{age:100}})  # 修改多条

db.table.remove({})  # 对数据的操作一定要加{}  官方已经不推荐删
db.table.drop()  # 删除表,即使表里没数据,但表已在磁盘,所以还是要删

# 官方推荐
db.table.deleteOne({})
db.table.deleteMany({})

修改器(简单粗暴)

$set 修改 {name:value} 相当于 dict["name"]=value
$unset 删除{$unset:{name:1}} 相当于 del dict["name"] # 1表示要把它删掉
db.user_info.updateOne({age:200},{$inset:{age:1}})

$inc引用增加,逐个增加 
db.user_info.updateMany({},{$inc:{age:1}})

# Array 操作
$push  在array中追加一个新的元素,相当于 [].append(item)
db.user_info.updateOne({name:"xxx"},{$push:{hobby:10}})

$pull  在array中删除一个元素,相当于 [].remove(item) [].pop(-1)
db.user_info.updateOne({name:"xxx"},{$pull:{hobby:10}})

$pop删 不含索引,-1 从前往后,1从后往前
db.user_info.updateOne({name:"xxx"},{$push:{hobby:1}})

sort skip limit

db.user_info.find({}).projection({}).sort({_id:-1}).limit(1000) # 排序,限制

db.user_info.updateOne({hobby:5},{$set:{"hobby.3":""}})  # 修改指定条件里面的hobby.3(位置)为5改为中文数字的五,此时前面的条件只是定位,并不是指定进行更改
# 为了严谨,修改如下
db.user_info.updateOne({hobby:6},{$set:{"hobby.$":""}})  # 找到条件,$保存符合索引条件的数据下标,这种仅限于mongoDB直接操作

# object 字典操作
db.user_info.updateOne({name:"xxx"},{$inc:{"info.tizhong":-5}})  # 减5

# array + Object
db.user_info.updateOne({"hobby.shengao":150},{$set:{"hobby.$.long":14}})

# limit
db.user_info.find({}).limit(5)  # 从当前位置选5
# skip
db.user_info.fing({}).skip(2)  # 从0开始跳过2条数据到当前位置
# sort
db.user_info.find({}).sort({id:1})  # 没有id的就是最小,从1开始排序,-1倒序

# limit+skip+sort  优先级最高的是sort
db.user_info.fing({}).limit(C).skip((p-1)*c)
db.user_info.fing({}).limit(5).skip(5).sort({id:-1})

 

3. pymongo

# 基础配置
import pymongo
from bson import ObjectId  # 导入相关模块

mongo_client = pymongo.MongoClient(host="127.0.0.1",port=27017)  # IP+端口
MONGO = mongo_client["s14day120"]  # 指定库

一些操作

# 查询数据
res = list(MONGO.user_info.find({}))  # 生成器
print(res)

res = MONGO.user_info.find_one({})  # 字典
print(res.get("name"))

res = MONGO.user_info.find_one({"id":20})  # ObjectID类型

# or查询,要加引号
res = list(MONGO.user_info.find({"$or":[{},{}]))

# 转换数据类型
res["id"] = str(res["id"])  # 这个是先转换成str
res_obj = MONGO.user_info.find_one({"id":ObjectId(res["_id"])})  # 把str转换成ObjectId
print(res.obj)  # 结果:{"_id":ObjectId('5c13a43554a...'),'id':20,'name':1}

res["id"] = str(res["id"])  # 把ObjectId转换成str
import json
res_json = json.dumps(res)
print(res_json)  #字典


# 插入数据,有one和many
res = MONIGO.user_info.insert_one({"name":"pymongo", "age":22})
print(res, res.inserted_id)  # 返回字符串,实际是ObjestId
print(res, res.inserted_ids)  # Many插入,返回的就是ObjestId

# 修改数据,有one和many
res = MONGO.user_info.update_one({"age":33, {"$set":{"name":"dasda","age":2133}}})
print(res,dir(res))

# 删除数据,有one和many
res = MONGO.user_info.delete_many({"name":1})

limit sort skip

res = list(MONGO.user_info.find({}).sort("age", pymongo.DESCENDING).skip(5).limit(2))
# ASCENDING升序

简单版修改数据

res = MONGO.user_info.find_one({"name":"xxx"})

res.get("info")["shengao"] = 170
res.get("info")["tizhong"] = 135
res.get("info")["long"] = 18.5

MONGO.user_info.update_one({"_id":res.get("_id")},{"$set":res})

 

posted @ 2019-06-16 23:42  pythonernoob  阅读(59)  评论(0)    收藏  举报