MongoDB 基于 Python 的简单使用
pymongo - Python driver for MongoDB
1. pymongo 安装
[1] - 安装 MongoDB:
sudo apt-get install mongodb
确保 Mongodb 安装正确, 测试:
mongo
> show dbs
[2] - pymongo安装:
sudo pip install pymongo
# pymongo 升级
sudo pip install --upgrade pymongo
2. pymongo 简单使用
连接MongoDB 需要使用 PyMongo 库的 MongoClient,一般来说传入MongoDB的IP及端口即可,第一个参数为地址host,第二个参数为端口port,端口如果不传默认是27017.
from pymongo import MongoClient
client = MongoClient() # 连接 mongo, 运行实例. 默认 host 和默认端口
# client = MongoClient('localhost', 27017)
# client = MongoClient('mongodb://localhost:27017/')
# client = MongoClient('host='localhost', port=27017')
# client = MongoClient('xxx.xxx.xxx.xxx')
db = client['databases_name'] # 获取数据库(database)
# db = Client.database_name
# print(db.list_database_names())
db.drop_database('database_name') # 删除某个数据库
# Collection 是存储在 MongoDB 的一组文档, 可以粗略地看做关系型数据库中的一个表 table.
coll = db['collection_name'] # 获取Collection
# coll = db.collection_name
print coll
MongoDB 中的数据是以 JSON 格式来表示和保存的, 如数据:
import time
test1 = {"author": "Test1",
"text": "test text1",
"tags": ["mongodb", "python", "pymongo"],
"date": time.time() }
test2 = {"author": "Test2",
"text": "test text2",
"tags": ["mongodb", "python", "pymongo"],
"date": time.time() }
2.1 插入数据
insert_one()
函数, 插入单个数据到 collection.
tests = db.Test
test_id = tests.insert_one(test1).inerted_id
print test_id
确认数据已经被正确插入:
db.collection_names(include_system_collections=False)
2.2 读取数据
find_one()
函数——从数据库中调出已存储的数据
coll.find_one(),只能获取一个数据,如果数据库中存在多个数据时,返回的是第一个数据的值.
find()函数 - 从数据库中读取所有存储数据
[1] - 读取单个数据
print coll.find_one()
[2] - 打印全部数据:
for data in coll.find():
print data
[3] - 获取特定数据:
for data in coll.find({'key':value}):
print data
[4] - find() 函数可以传入多个键(key),每个键(key)以逗号隔开
for data in coll.find({'key1':value1, 'key2':value2}):
print data
[5] - find() 函数查询条件不是固定的条件, 而是一个键值.
for data in coll.find('index': {'$gt': 100}):
print data
这里的查询条件是, 所有 index 满足大于 100 的数据.
$lt 小于 {'index': {'$lt': 100}}
$gt大于 {'index': {'$gt': 100}}
$lte小于等于 {'index': {'$lte': 100}}
$gte大于等于 {'index': {'$gte': 100}}
$ne不等于 {'index': {'$ne': 100}}
$in在范围内 {'index': {'$in': [10, 100]}}
$nin不在范围内 {'index': {'$nin': [10, 100]}}
[6] - find() 函数正则项查询条件
for data in coll.find({'author': {'$regex': '^T.*'}}):
print data
这里正则查询条件是, 用 $regex
来匹配查询条件, 即 ^T.
表示个所有 T 开头的数据.
$regex 匹配正则{'name': {'$regex': '^M.*'}} name 以 M 开头
$exists 属性是否存在{'name': {'$exists': True}}name属性存在
$type 类型判断{'age': {'$type': 'int'}}age的类型为int
$mod 数字模操作{'age': {'$mod': [5, 0]}}年龄模 5余0
$text 文本查询{'$text': {'$search': 'Mike'}}text类型的属性中包含Mike字符串
$where高级条件查询{'$where': 'obj.fans_count == obj.follows_count'}自身粉丝数等于关注数
[7] - count()函数
coll.count() # Collection 里的数量
coll.find({'key':value}) # 某个key的数量
2.3. 删除文档
[1] - 删除满足条件的字段数据:
coll.delete_one({'type': 'image'})
[2] - 删除多个文档:
res = coll.delete_many({'type': 'image'})
print(res.deleted_count, "条数据已删除.")
[3] - 删除 coll 中所有文档数据:
res = coll.delete_many({})
print(res.deleted_count, "条数据已删除.")
2.4. 删除集合
db = client["tdb"]
col = db["tcoll"]
col.drop()
Reference
[1] - mongoDB 手册
[2] - pymongo 官方手册