本文包括Python连接MongoDB增删查改和排序
一、连接MongoDB
pip install pymongo
连接数据库,如果数据库已经存在,直接使用。若未存在,则新建一个数据库。
-
list_database_names():所有数据库名称
-
list_collection_names():所有集合(数据表)名称
1
2
3
4
5
6
7 1import pymongo
2
3client = pymongo.MongoClient("mongodb://localhost:27017/") # 连接MongoDB
4dblist = client.list_database_names() #获取所有数据库名称
5print(dblist)
6
7
1
2
3
4
5
6
7
8 1import pymongo
2
3client = pymongo.MongoClient("mongodb://localhost:27017/") # 连接MongoDB
4db = client.douban # 选择数据库douban,等同于db = client['douban']
5tablelist = db.list_collection_names() #获取所有集合(数据表)名称
6print(tablelist)
7
8
在 MongoDB 中,集合,即数据表只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
二、查询数据
1、普通查询
-
find()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 1import pymongo
2import pandas as pd
3
4client = pymongo.MongoClient("mongodb://localhost:27017/") # 连接MongoDB
5db = client.douban #选择数据库douban,等同于db = client['douban']
6table = db.movies #选择数据表,等同于table = db['movies']
7# x = table.find_one() #查询第一条
8
9#查询值为1的列,值为0表示不查询此列
10x = table.find({}, {"_id": 0, 'rank': 1, 'movie': 1, 'star': 1})
11# print(list(x)) #转化为list对象
12results = pd.DataFrame(list(x)) #转化为pd类型
13
14print(results)
15#for x in table.find(): #一条一条遍历
16# print(x)
17
18
注意,不能像下面这样写,会报错:
1
2
3
4 1#除了_id,其他键的值同时存在1和0时会报错
2x = table.find({}, {"_id": 0, 'rank': 1, 'movie': 1, 'star': 0})
3
4
2、条件查询
-
正则查询
-
$gt:大于
-
$lt:小于
-
limit()
1
2
3
4
5
6
7
8
9
10
11
12
13
14 1import pymongo
2
3client = pymongo.MongoClient("mongodb://localhost:27017/") # 连接MongoDB
4db = client.douban #选择数据库douban,等同于db = client['douban']
5table = db.movies #选择数据表,等同于table = db['movies']
6
7query = {'star':'9.2'}
8#query2 = {'star': {'$gt':'9.2'}} #star大于9.2
9#query3 = {'movie': {"$regex": "^肖"}} # 正则查询,以肖开头的电影
10results = table.find(query)
11#results = table.find(query).limit(3) #查询指定条数,这里是3条
12print(list(results)[0])
13
14
三、插入数据
-
insert_one()
-
insert_many()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 1import pymongo
2
3client = pymongo.MongoClient("mongodb://localhost:27017/") # 连接MongoDB
4db = client.douban #选择数据库douban,等同于db = client['douban']
5table = db.movies #选择数据表,等同于table = db['movies']
6# data = {'rank': '12', 'movie': '大白历险记', 'star': '8.2', 'introduce': '历险/动作'}
7# table.insert_one(data) #插入一条
8datas = [{'_id':1,'rank': '12', 'movie': '大白历险记', 'star': '8.2', 'introduce': '历险/动作'},
9 {'_id': 2, 'rank': '13', 'movie': '大黑历险记','star': '8.3', 'introduce': '历险/动作'},
10 {'_id': 3, 'rank': '14', 'movie': '小白历险记','star': '8.4', 'introduce': '历险/动作'}
11 ]
12x = table.insert_many(datas) #插入多条
13print(x.acknowledged)
14
15
四、更新数据
-
update_one()
-
update_many()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 1import pymongo
2
3client = pymongo.MongoClient("mongodb://localhost:27017/") # 连接MongoDB
4db = client.douban #选择数据库douban,等同于db = client['douban']
5table = db.movies #选择数据表,等同于table = db['movies']
6
7# data = {'rank': '12', 'movie': '大白历险记'}
8# new_data = {'$set':{'rank': '21', 'movie': '二郎历险记'}}
9# table.update_one(data, new_data) #更新一条语句
10
11data = {'movie':{'$regex':'^大白'}} #正则查找
12new_data = {'$set': {'introduce': '喜剧/动作'}}
13table.update_many(data,new_data) #更新多条
14
15x = table.find({'introduce': '喜剧/动作'})
16print(list(x))
17
18
五、删除数据
-
delete_one()
-
delete_many()
-
drop()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 1import pymongo
2
3client = pymongo.MongoClient("mongodb://localhost:27017/") # 连接MongoDB
4db = client.douban # 选择数据库douban,等同于db = client['douban']
5table = db.movies # 选择数据表,等同于table = db['movies']
6
7# data = {'rank': '12', 'movie': '大白历险记'}
8# table.delete_one(data) #删除一条
9
10datas = {'movie': {'$regex': '^大白'}}
11x = table.delete_many(datas)
12# table.delete_many() #delete_many()没有参数的话会把表里面所有数据都删除
13
14print(x.deleted_count) #统计删除了多少条数据
15
16# table.drop() #删除table表
17
18
六、排序数据
-
sort()
1
2
3
4
5
6
7
8
9
10 1import pymongo
2
3client = pymongo.MongoClient("mongodb://localhost:27017/") # 连接MongoDB
4db = client.douban # 选择数据库douban,等同于db = client['douban']
5table = db.movies # 选择数据表,等同于table = db['movies']
6
7x = table.find().sort('star',1) #1是升序,-1是降序,默认升序
8print(list(x)[0])
9
10