【mongodb】python操作mongodb

MongoDB-python操作mongodb

 

安装

pip install pymongo

连接mongodb

复制代码
from pymongo import MongoClient

my_client = MongoClient("127.0.0.1",27017)

mdb = my_client["stutent"]   # 指定连接的库名
print(mdb)


# Database(MongoClient(host=['127.0.0.1:27017'], document_class=dict, tz_aware=False, connect=True), 'stutent')

# connect=True 表示连接成功
# document_class=dict 查询结果以字典的形式返回
复制代码

数据的增删改查

添加

复制代码
# 添加单条数据
res = mdb.user.insert_one({"name":"boy"})
print(res.inserted_id)  # 不是字符串
print(type(res.inserted_id))  # <class 'bson.objectid.ObjectId'>

# 添加多条数据
res = mdb.stutent.insert_many([{"name":"小胡"},{"name":"小花"}])
print(res.inserted_ids)  # [ObjectId('5d2f247ee6390ef6741370a7'), ObjectId('5d2f247ee6390ef6741370a8')]
print(type(res.inserted_ids)) # <class 'list'>
复制代码

查看

查找符合条件的第一条数据
res = mdb.stutent.find_one({"name":"小黑"})
res = mdb.stutent.find_one({"_id":ObjectId("5d2ed96e38887b85450ed6d8")})
查找所有数据
res = mdb.stutent.find({})   # 返回的是可迭代对象
print(list(res))
"""
for i in res:
    print(i)
"""
1
2
3
4
5
6
"""
- 我们通过find查询到了所有数据
- 如果前端页面需要用json数据进行渲染页面
- 但_id并不是字符串类型而是ObjectId类型,且无法直接转换成json
- 那么我们可以通过下面这两种方式将ObjectID转换成json
"""
第一种方式,效率不高
复制代码
import json
res_list = []
for user in res:
    # 将列表中的_id值转换成字符串
    user["_id"] = str(user.get("_id"))
    res_list.append(user)
# 将列表序列化
ret = json.dumps(res_list)
print(ret)
复制代码
第二种方式,效率高
res = list(mdb.stutent.find({})) # 返回的是可迭代对象
import json
for index,user in enumerate(res):
    res[index]["_id"] = str(user.get("_id"))
ret = json.dumps(res)
print(ret)

修改

# 修改符合条件所有数据的第一条
res = mdb.stutent.update_one({"name":"小花"},{"$set":{"name":"小二b"}})

# 修改符合条件的所有数据,没有就添加一条
res = mdb.stutent.update_many({"name":"小花"},{"$set":{"name":"小二b","age":80}})
print(res) # {'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}
批量操作
s = {"name":{"$regex":"胡"}}   # 模糊匹配修改器
data = {
    "$set":{"sex":"man","hobby":["抽烟","喝酒"]}
}
mdb.stutent.update_many(s,data)
用字典的方法对数据库中的数据进行修改
复制代码
# 返回所以数据中符合条件的第一条数据,并且是dict格式
res = mdb.stutent.find_one({"name":"小胡"})
# {'_id': ObjectId('5d2f246d7fb0bb7a411f350c'), 'name': '小胡', 'sex': 'man', 'hobby': ['抽烟', '喝酒']}
print(res)

res["sex"] = "male"   # 在内存级别修改dict中的数据,所有字典的方法都可以使用
# 在通过update方法更新到数据库
mdb.stutent.update_one({"name":"小胡"},{"$set":{"sex":res.get("sex")}})
# { "_id" : ObjectId("5d2f246d7fb0bb7a411f350c"), "name" : "小胡", "sex" : "male", "hobby" : [ "抽烟", "喝酒" ] }
复制代码

删除

复制代码
# 只删除符合条件的第一条数据
res = mdb.stutent.delete_one({"name":"大呲花"})
# 返回删除数据的数量
print(res.deleted_count)

# 删除符合条件的所有数据
res = mdb.stutent.delete_many({"name":"小二b"})
print(res.deleted_count)
复制代码

其他操作

复制代码
import pymongo
"""
DESCENDING 从大到小排序
ASCENDING  从小到大排序
"""
# 返回的是可迭代对象
# sort排序
res = mdb.stutent.find().sort("age",pymongo.ASCENDING)
for i in res:
    print(i)

# 选取
mdb.stu.find().limit(2)
# 跳过
mdb.stu.find().skip(2)

# 分页
res = list(mdb.stu.find().sort("age",pymongo.ASCENDING).limit(2).skip(4))
print(res)
复制代码
1
2
3
from  bson  import  ObjectId
# 把字符串转换成ObjectId对象进行查询
res  =  mdb.user.find_one({ "_id" :ObjectId( "5d2ed96e38887b85450ed6d8" )})

转载于:https://www.cnblogs.com/youxiu123/p/11493209.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值