• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Python使用MongoDB

武飞扬头像
木叶苍蓝
帮助1

安装
pip3 install pymongo
连接
# 无密码连接
import pymongo
mongo_client = pymongo.MongoClient("127.0.0.1", 27017)
# 有密码连接
import pymongo
mongo_client = pymongo.MongoClient("127.0.0.1", 27017)
mongo_auth = mongo_client.admin 
# mongo_client["admin"] 
mongo_auth.authenticate('用户名', '密码')
# 无密码连接
import pymongo
mongo_client = pymongo.MongoClient("mongodb://127.0.0.1:27017")
# 有密码连接
import pymongo
import urllib.parse
mongo_username = urllib.parse.quote_plus('用户名')
mongo_password = urllib.parse.quote_plus('密码')
mongo_client = pymongo.MongoClient("mongodb://%s:$s@127.0.0.1:27017"%(mongo_username, mongo_password))
print(mongo_client.server_info()) # 判断是否连接成功
获取Database 和 Collection

若没有 Database 和 Collection 则会自动创建

mongo_db = mongo_client["database"]  # mongo_client.database
mong_collection = mongo_db["collection"] # mongo_db.collection
CURD 操作
  • insert_one() 插入一条数据
import datatime

info = {
  "name": "Zarten",
  "text": "Inserting a Document",
  "tags": ["a", "b", "c"],
  "date": datetime.datetime.now()
}
mongo_collection.insert_one(info)
  • insert_many() 插入多条数据
import datetime
info_1 = {
    'name' : 'Zarten_1',
    'text' : 'Inserting a Document',
    'tags' : ['a', 'b', 'c'],
    'date' : datetime.datetime.now()
}

info_2 = {
    'name' : 'Zarten_2',
    'text' : 'Inserting a Document',
    'tags' : [1, 2, 3],
    'date' : datetime.datetime.now()
}

insert_list = [info_1, info_2]
mongo_collection.insert_many(insert_list)
  • 插入字符串类型的时间
    由上图可以看到插入字符串时间时,mongodb自动转成了 ISOdate类型,若需要时间在mongdb也是字符串类型,只需这样操作即可
datetime.datetime.now().isoformat()
  • delete_one() 删除一条数据
mongo_collection.delete_one({'text' : 'a'})
  • delete_mang() 删除多条数据
mongo_collection.delete_many({'text' : 'a'})
  • update_one() 更新一条数据
info = {
    'name': '桃子 ',
    'text': 'peach',
    'tags': [1, 2, 3],
    'date': datetime.datetime.now()

}
update_condition = {'name' : 'Zarten_2'} #更新的条件,也可以为多个条件
#更新条件多个时,需要同时满足时才会更新
# update_condition = {'name' : 'Pear',
#                     'text' : '梨子'}

mongo_collection.update_one(update_condition, {'$set' : info})
  • update_many() 更新多条数据
info = {
    'name': 'Zarten',
    'text': 'a',
    'tags': [1, 2, 3],
    'date': datetime.datetime.now()

}
update_condition = {'text' : 'a'} #更新的条件
#更新条件多个时,需要同时满足时才会更新
# update_condition = {'name' : 'Pear',
#                     'text' : '梨子'}

mongo_collection.update_many(update_condition, {'$set' : info})
  • 更新时,若无满足条件,则插入数据
mongo_collection.update_many(update_condition, {'$set' : info}, upsert= True)
  • find_one() 查询一条数据
find_condition = {
    'name' : 'Banana',
    'text' : 'peach'
}
find_result = mongo_collection.find_one(find_condition)

# 可以通过**projection**参数来指定需要查询的字段,包括是否显示 _id ,更多具体用法参考 [find()](https://link.zhihu.com/?target=https://api.mongodb.com/python/current/api/pymongo/collection.html#pymongo.collection.Collection.find)

find_condition = {
    'name' : 'Zarten_3',
}
select_item = mongo_collection.find_one(find_condition, projection= {'_id':False, 'name':True, 'num':True})
print(select_item)
  • 范围查询
    范围查询通常用学新通gte 大于等于 $lt 小于
import datetime
find_condition = {
    'date' : {'$gte':datetime.datetime(2018,12,1), '$lt':datetime.datetime(2018,12,3)}
}
select_item = mongo_collection.find_one(find_condition)
print(select_item)
  • find() 查询多条数据
find_condition = {
    'name' : 'Banana',
    'text' : '香蕉'
}
find_result_cursor = mongo_collection.find(find_condition)
for find_result in find_result_cursor:
    print(find_result)
  • 通过 _id 来查询
    查询条件中_id 类型是ObjectId类型,也就是插入时返回的对象。
    若 _id 提供的是str类型的,我们需要转成ObjectId类型
from bson.objectid import ObjectId
query_id_str = '5c00f60b20b531196c02d657'
find_condition = {
    '_id' : ObjectId(query_id_str),
}
find_result = mongo_collection.find_one(find_condition)
print(find_result)
  • 查询并删除,匹配单条数据
find_condition = {
    'name' : 'Banana',
}
deleted_item = mongo_collection.find_one_and_delete(find_condition)
print(deleted_item)
  • 查询并删除,匹配多条数据,有选择的返回某条数据。通过sort参数
find_condition = {
    'name' : 'Zarten_2',
}
deleted_item = mongo_collection.find_one_and_delete(find_condition, sort= [('num', pymongo.DESCENDING)])
print(deleted_item)
  • count_documents() 计数
    `注意:此函数在3.7版本添加,以下的版本无法使用
find_condition = {
    'name' : 'Zarten_1'
}
select_count = mongo_collection.count_documents(find_condition)
print(select_count)
  • create_index() 创建索引
    插入数据时,已经有一个_id索引了,我们还可以自定义创建索引
    参数 unique设置为True时,创建一个唯一索引,索引字段插入相同值时会自动报错。默认为False,为False时可以插入相同值
mongo_collection.create_index('name', unique= True)
  • list_indexes() index_information() 获取索引信息
# list_indexs = mongo_collection.list_indexes()
# for index in list_indexs:
#     print(index)

index_info = mongo_collection.index_information()
print(index_info)
  • drop_index() drop_indexes() 删除索引,需要使用索引的别名
del_index = mongo_collection.drop_index('name_1')
print(del_index)
  • drop() 删除集合
mongo_collection.drop()
符号 含义 示例
$lt 小于 {'age': {'$lt': 20}}
$gt 大于 {'age': {'$gt': 20}}
$lte 小于等于 {'age': {'$lte': 20}}
$gte 大于等于 {'age': {'$gte': 20}}
$ne 不等于 {'age': {'$ne': 20}}
$in 在范围内 {'age': {'$in': 20}}
$nin 不在范围内 {'age': {'$nin': 20}}

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgkfhkj
系列文章
更多 icon
同类精品
更多 icon
继续加载