安装
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%3A//api.mongodb.com/python/current/api/pymongo/collection.html%23pymongo.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}} |
网友评论