安装:
pip install pymongo
创建数据库(先装好MongoDB,并且启动):
import pymongo myclient = pymongo.MongoClient('mongodb://localhost:27017/') mydb = myclient['school']
检查数据库是否已存在:
dblist = myclient.list_database_names() # dblist = myclient.database_names()
# database_names 在最新版本的 Python 中已废弃,Python3.7+ 之后的版本改为了 list_database_names()。 if 'school' in dblist: print("数据库已存在!")
创建集合(表):
mycol = mydb["children"]
判断集合是否存在:
collist = mydb. list_collection_names() # collist = mydb.collection_names() if "children" in collist: # 判断 children 集合是否存在 print("集合已存在!")
数据库操作:
增:
# 增加一条数据
children = { 'name': '小米', 'age': 8, 'score': 72 } a = mycol.insert_one(children)
# print(x.inserted_id) 输出插入后对象的id
看到数据库已经插入成功
# 增加多条数据 children = [{ 'name': '小米', 'age': 8, 'score': 72 },{ 'name': '小明', 'age': 9, 'score': 54 },{ 'name': '小红', 'age': 10, 'score': 62 },{ 'name': '小刚', 'age': 11, 'score': 88 }] a = mycol.insert_many(children) print(a.inserted_ids) # 输出 [ObjectId('5efebd97495b81bcb755df95'), ObjectId('5efebd97495b81bcb755df96'), ObjectId('5efebd97495b81bcb755df97'), ObjectId('5efebd97495b81bcb755df98')]
插入成功
如果要自定义id则在对象里加入属性'_id'
查:
# 查一个 c = mycol.find_one() # 查所有 a = mycol.find() for item in a: print(item) #输出 {'_id': ObjectId('5efd8794fafed20bb1930488'), 'name': '小米', 'age': 8, 'score': 72} {'_id': ObjectId('5efebd97495b81bcb755df95'), 'name': '小米', 'age': 8, 'score': 72} {'_id': ObjectId('5efebd97495b81bcb755df96'), 'name': '小明', 'age': 9, 'score': 54} {'_id': ObjectId('5efebd97495b81bcb755df97'), 'name': '小红', 'age': 10, 'score': 62} {'_id': ObjectId('5efebd97495b81bcb755df98'), 'name': '小刚', 'age': 11, 'score': 88}
# 在 find() 中设置参数来过滤数据 x = mycol.find({'name': '小红'}) for item in x: print(item) #输出 {'_id': ObjectId('5efebd97495b81bcb755df97'), 'name': '小红', 'age': 10, 'score': 62} # 对查询结果设置指定条数的记录可以使用 limit() 方法 x = mycol.find().limit(3) for item in x: print(item)
# 输出 {'_id': ObjectId('5efd8794fafed20bb1930488'), 'name': '小米', 'age': 8, 'score': 72} {'_id': ObjectId('5efebd97495b81bcb755df95'), 'name': '小米', 'age': 8, 'score': 72} {'_id': ObjectId('5efebd97495b81bcb755df96'), 'name': '小明', 'age': 9, 'score': 54} # 正则表达式查询,正则表达式修饰符只用于搜索字符串的字段 x = mycol.find({'name':{'$regex':'明'}}) for item in x: print(item) # 输出 {'_id': ObjectId('5efebd97495b81bcb755df96'), 'name': '小明', 'age': 9, 'score': 54}
# 类似正则表达式的条件还有 $lt小于{'age': {'$lt': 20}} $gt大于{'age': {'$gt': 20}} $lte小于等于{'age': {'$lte': 20}} $gte大于等于{'age': {'$gte': 20}} $ne不等于{'age': {'$ne': 20}} $in在范围内{'age': {'$in': [20, 23]}} $nin不在范围内{'age': {'$nin': [20, 23]}} $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'}自身粉丝数等于关注数 # 这些操作的更详细用法在可以在MongoDB官方文档找到: https://docs.mongodb.com/manual/reference/operator/query/
改:
myquery = {"name": '小红'} #条件 newvalues = {"$set": {"age": 13,"score": 100}} #修改 # 更新一条数据 mycol.update_one(myquery, newvalues) # 更新全部数据 mycol.update_many(myquery, newvalues)
删:
myquery = { "name": "小明" } # 删除一个 mycol.delete_one(myquery) # 删除多个 x = mycol.delete_many(myquery) # deleted_count是删除的个数 print(x.deleted_count, "个文档已删除") # delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档 # drop()是删除一个集合(表) mycol.drop()
排序:
s = mycol.find().sort("age")
# mycol.find().sort("age",-1) 降序 for x in s: print(x) #输出 {'_id': ObjectId('5efd8794fafed20bb1930488'), 'name': '小米', 'age': 8, 'score': 72} {'_id': ObjectId('5efebd97495b81bcb755df95'), 'name': '小米', 'age': 8, 'score': 72} {'_id': ObjectId('5efebd97495b81bcb755df96'), 'name': '小明', 'age': 9, 'score': 54} {'_id': ObjectId('5efebd97495b81bcb755df98'), 'name': '小刚', 'age': 11, 'score': 88} {'_id': ObjectId('5efebd97495b81bcb755df97'), 'name': '小红', 'age': 13, 'score': 100}