了解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:[0,2,5,1]}}) $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})

浙公网安备 33010602011771号