MongoDB是一个基于分布式文件存储的开源数据库,由C++语言编写,与平台无关,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
在Python中操作MongoDB可以使用PyMongo,在ubuntu上安装PyMongo,执行:$ python3 -m pip install pymongo ,结果如下图所示:
在ubuntu上安装MongoDB,执行:$ sudo apt-get install mongodb ,这样在14.04上默认安装的是2.4.9版本,安装完后默认启动服务,但是之前我们安装pymongo时是3.7.2版本,这样导致pymongo与mongo不匹配,即出现” pymongo.errors.ConfigurationError: Server at localhost:27017 reports wire version 0, but this version of PyMongo requires at least 2 (MongoDB 2.6).”的错误,解决方法可以是降低pymongo的版本,或者升级mongo的版本。在ubuntu安装高版本的mongodb可以参考:https://docs.mongodb.com/v2.6/tutorial/install-mongodb-on-ubuntu/ ,这里为了简便,降低pymongo的版本,从3.7.2降低到3.4.0,执行命令:conda install pymongo=3.4.0 。
测试代码如下:
import pymongo
'''
reference:
https://juejin.im/post/5addbd0e518825671f2f62ee
http://www.runoob.com/python3/python-mongodb.html
https://blog.csdn.net/xsdxs/article/details/52565489
'''
def print_results(description, results):
strs = description + " type:"
print(strs, type(results))
description += ":"
if (isinstance(results, dict)):
print(description, results)
else:
for result in results:
print(description, result)
if __name__ == "__main__":
print("pymongo version:", pymongo.version)
client = pymongo.MongoClient(host='localhost', port=27017) # mongodb默认端口是27017
print("connection successed:", client.server_info()) # 判断是否连接成功
db = client.test # 指定test数据库, 如果没有则会自动创建
collection = db.students # 每个数据库又包含许多集合
student1 = {'id': '20170101', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
result = collection.insert_one(student1) # 在students集合中插入一条学生数据
print("insert result:", result)
student2 = {'id': '20170102', 'name': 'Tom', 'age': 21, 'gender': 'male'}
student3 = {'id': '20170203', 'name': 'Mike', 'age': 22, 'gender': 'male'}
result = collection.insert_many([student2, student3]) # 在students集合中插入多条学生数据
print("many insert result:", result)
result = collection.find_one({"name": "Tom"}) # 查询单个结果
print_results("find one result", result)
results = collection.find({"age": 20}) # 查询多个结果
print_results("find many results", results)
results = collection.find({"age": {"$gt": 20}}) # 查询年龄大于20的多个结果
print_results("find age > 20 many results", results)
count = collection.find({"age": 20}).count() # 查询计数
print("find result count:", count)
result = collection.delete_one({"age": 21}) # 删除一条数据
print("delete one result:", result)
print("delete one result count:", result.deleted_count)
results = collection.delete_many({"age": {"$gte": 21}})
print("delete many results:", results)
print("delete many results count", results.deleted_count)
condition = {"name": "Jordan"}
student = collection.find_one(condition)
#print_results("find one result", student)
student["age"] = 25
result = collection.update(condition, student) # 更新一条数据
print("update result:", result)
print("db collection names:", db.collection_names()) # 查看test数据库下所有表名称
dblist = client.database_names() # 获取mongodb下所有数据库
print("db list names:", dblist)
执行结果如下: