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 之外, 不能在一个对象中同时指定 01,如果你设置了一个字段为 0,则其他都为 1,反之亦然。

  • mycol.find().limit(3) 返回指定条数记录