基本介绍
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
指定集合
"""
mongodb的集合相当于关系型数据库中的表
"""
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)
result = collection.find_one(find_condition, projection={
"_id" :True , "name" :True , "msg" :True
})
查询多条数据
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 )
}
}
result = collection.find_one(find_condition)
数据通过 _id来查询
from bson.objectid import ObjectId
query_id_str = "xxxxxxxxxxxxxxxx"
find_condition = {
"_id" : ObjectId(query_id_str),
}
result = collection.find_one(find_condition)
查询一条数据并且删除
find_condition = {
"name" : "xiaoli"
}
deleted_data = collection.find_one_and_delete(find_condition)
deleted_data = collection.find_one_and_delete(find_condition, sort = [("index" , pymongo.DESCENDING)])
创建索引
collection.create_index("name" , unique = True )
获取/删除索引
index_name = collection.index_information()
"""
index_list = collection.list_indexes()
for index in index_list:
print(index)
"""
index_del = collection.drop_index("name" )
计数
find_condition = {
"name" : "xiaohong"
}
result_count = collection.count_documents(find_condition)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义