mongodb在python中的基本使用--pymongo

基本介绍
mongodb是由c++编写的的一种面向文档的非关系型数据库,以键值对的方式存储,结构不固定灵活易存储。类似Json对象。而mongodb使用的数据结构是BSON(二进制json),提高了存储和扫描效率。
在python中使用
# py通过pymongo操作mongodb

pip install pymongo
连接mongodb
import pymongo
import urllib.parse

# 无密码连接
client = pymongo.MongoClient(host="localhost", port="27017")
"""
client = pymongo.MongoClient('mongodb://localhost:27017')
"""

# 有密码连接
client = pymongo.MongoClient(host="localhost", port="27017")
mongo_auth = client.admin
mongo_auth.authenticate(username, password)
"""
user = urllib.parse.quote_plus(username)
pwd = urllib.parse.quote_plus(password)
client = pymongo.MongoClient('mongodb://%s:%s@localhost:27017' % (user, pwd))
"""
client.server_info() # 判断是否连接成功
指定数据库
db = client.test
# db = client["test"]
指定集合
"""
mongodb的集合相当于关系型数据库中的表
"""
collection = db.demo
# collection = db["demo"]
插入单条数据
import datetime

data = {
  "name": "xiaoming",
  "msg": "shi yi ge xue sheng"
  "date": datetime.datetime.now()
}
collection.insert_one(data)
插入多条数据
import datetime

data_list = []
for name in ["xiaoming", "xiaoli"]:
  	data = {
      "name": name,
      "msg": "shi yi ge xue sheng",
      "date": datetime.datetime.now()
    }
    data_list.append(data)
collection.insert_many(data_list)    
删除一条数据
collection.delete_one({"name":"xiaoming"})

# 如果删除条件匹配到多条数据,默认只删除第一条数据
删除多条数据
collection.delete_many({"msg":"shi yi ge xue sheng"})
更新单条数据
data = {
  "name": "xiaoming",
  "msg": "He is a teacher",
 	"date": datetime.datetime.now()
}
update_condition = {"name": "xiaoli"}
collection.update_one(update_condition, {"$set":data})
更新多条数据
data = {
  "name": "xiaohong",
  "msg": "She is a girl",
  "date": datetime.datetime.now()
}
update_condition = {"name": "xiaoming"}
collection.update_many(update_condition, {"$set":data})

# 更新时,若无满足条件则插入数据
collection.update_many(update_condition, {"$set":data}, upsert = True)
查询一条数据
find_condition = {
  "name": "xiaoming"
}
find_result = collection.find_one(find_condition)

# 根据projection 参数来指定需要查询的字段
result = collection.find_one(find_condition, projection={
  "_id":True, "name":True, "msg":True
})
查询多条数据
# 这样查询返回结果类型时cursor,需要迭代得到每个结果为dict
find_condition = {
  "name": "xiaoming"
}
result_cursor = collection.find(find_condition)
for result in result_cursor:
  	print(result)
时间范围查询
find_condition = {
  "date": {
    "$gte": datetime.datetime(2022,3,18), "$lt": datetime.datetime(2022,3,21)
  }
}
# 查询时间范围在18号到21号之前的数据
result = collection.find_one(find_condition)
数据通过 _id来查询
from bson.objectid import ObjectId

query_id_str = "xxxxxxxxxxxxxxxx"
find_condition = {
  "_id": ObjectId(query_id_str),
}
# _id提供的是str类型,需要转换为ObjectId类型
result = collection.find_one(find_condition)
查询一条数据并且删除
find_condition = {
  "name": "xiaoli"
}
deleted_data = collection.find_one_and_delete(find_condition)

# 使用sort参数
deleted_data = collection.find_one_and_delete(find_condition, sort = [("index", pymongo.DESCENDING)])
创建索引
# 自定义索引, unique为true是唯一索引
collection.create_index("name", unique = True) 
获取/删除索引
index_name = collection.index_information()

"""
index_list = collection.list_indexes()
for index in index_list:
		print(index)
"""

# 可以看到获取索引有两个方法,index_information/list_indexes

# 删除
index_del = collection.drop_index("name")
计数
find_condition = {
  "name": "xiaohong"
}
result_count = collection.count_documents(find_condition)
# 注意 count_documents 方法需要py版本3.7及其以上
posted @   Lei、Sunny  阅读(230)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示