MongoDB(五) Python操纵MongoDB
下载pymongo
pip install pymongo
初步使用
1. 启动mongdb服务
如果没有安装过mongodb或者不知道怎么启动的可以查看下面这两篇文章
mongod -f ../conf/mongod.conf
最简单的测试一下连接
import pymongo
# 1.建立连接
client = pymongo.MongoClient()
# 2.show dbs
print(client.list_database_names())
如果成功输出所有数据库的名字那么连接成功
2 CRUD操作
1.创建
在 MongoDB 中,集合只有在内容插入后才会创建!
就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
数据库也是一个道理
指定/创建数据库
db = client['test']
指定/创建集合
my_col = db['student']
案例如下
import pymongo
# 1.建立连接
client = pymongo.MongoClient()
print(client.list_database_names())
下面的操作是创建数据库与集合,并插入一条数据
# 2.指定/创建数据库
db = client['test']
# 3.指定集合
my_col = db['student']
# 4.插入数据
my_col.insert_one({'name': 'tong', 'age': 18, 'sex': 'man'})
print(client.list_database_names())
['admin', 'config', 'local', 'tty']
['admin', 'config', 'local', 'test', 'tty']
Process finished with exit code 0
可以看到,在插入数据后,新建了数据库test
,同样的集合student
也被创建
2.新增数据
之前已经创建了集合my_col
,对于数据(文档)的操作都要通过my_col
来进行
新增一条insert_one
方法的第一参数是字典 name => value
对。
my_col.insert_one({'name':'tong', 'age':18, 'sex':'man'})
新增多条insert_many()
方法的第一参数是字典列表。
my_col.insert_many([
{'name':'lin', 'age':19, 'sex':'girl'},
{'name': 'huang', 'age': 39, 'sex': 'man'},
{'name': 'xuan', 'age': 20, 'sex': 'girl'}
])
可以看到格式与mongo shell 类似
3.修改数据
同样传入的参数都是字典类型的
修改一条数据
my_col.update_one({'name':'tong'},{'$set':{'name':'aaa'}})
update_one()
方法只能修匹配到的第一条记录,如果要修改所有匹配到的记录,可以使用 update_many()
修改多条数据
my_col.update_many({'name':'tong'},{'$set':{'name':'aaa'}})
4.删除数据
delete_one
删除一条数据
my_col.delete_one({'name':'huang'})
delete_many()
删除符合条件的全部数据
my_col.delete_many({'name':'huang'})
delete_many({})
删除集合中的所有文档数据
my_col.delete_many({})
drop()
删除集合
mycol.drop()
5.查询数据
find()
查询集合中所有的数据
for data in mycol.find():
print(data)
或者
print(list(my_col.find()))
find_one
查询第一条数据
print(my_col.find_one())
find({option})
按条件查询
- 普通查询
articleid=100001
print(list(my_col.find({'articleid': '100001'})))
- 高级查询
likenum>200
print(list(my_col.find({'likenum': {'$gt': 200}})))
- 正则表达式查询
content 以 我字开头的
option = {"content": {"$regex": "^我"}}
print(list(my_col.find(option)))
find({},{option})
投影查询 (只返回likenum
字段)
-
0
代表不返回 -
1
代表返回
print(list(my_col.find({}, {"_id": 0, "likenum": 1})))
[{'likenum': 1000}, {'likenum': 888}, {'likenum': 666}, {'likenum': 2000}, {'likenum': 3000}]
注意: 除了 _id
之外, 不能在一个对象中同时指定 0
和 1
,如果你设置了一个字段为 0
,则其他都为 1
,反之亦然。
mycol.find().limit(3)
返回指定条数记录