Python 培训(通用)mongoDB数据库

安装 mongoDB 、pymongo、pycharm插件

  • 首先我们去 mongoDB 的官网下载安装 mongoDB
  • 然后我们使用 pip 安装 pymongo
  • 我们还可以在 pycharm 中安装 mongoDB 插件:在 File > settings > plugin 中安装 mongo plugin。重启 Pycharm

  • 重启以后右侧就有 mongoDB 的界面,按默认端口链接就可以看到数据库的情况,如下:

访问数据库

  • 熟悉 mongoDB 的小伙伴应该知道,mongoDB 数据库的结构就是 各个子数据库 > 各个集合 > 集合中的数据。通常,每个项目放在不同的子数据库中,按照模块分散在各个集合中,每个集合中存储着 json 格式的数据。
  • 明确了结构以后,我们就可以很清楚地访问这些结构,如下:
import pymongo

#	总数据库
myClient = pymongo.MongoClient()

#	子数据库
myDB = myClient['DBName']

#	集合
myCollection = myDB['collectionName']
  • 我们主要就是控制 myCollection 这个对象进行操作。
  • 要创建数据库,就需要先输入上面的代码,指向一个不存在的数据库,然后向里面增加一条数据,这个数据库就被创建了

添加数据

插入一条数据:insert_one

data = {
    'name': 'Tom',
    'age': 5
}
result = myCollection.insert_one(data)
insertId = result.inserted_id
  • 如上可以在集合中插入一条数据,如果数据中有 _id 这个值,那么它就是 id,否则会自动添加一个 id

插入多条数据:insert_many

data = [
    {
        'name': 'Tom',
        'age': 5
    },
    {
        'name': 'Jerry',
        'age': 4
    }
]
result = myCollection.insert_many(mylist)
insertIds = result.inserted_ids

查询数据

查询一条数据:find_one(),返回多条数据:find()

  • 查询一条数据,就是返回只一条满足条件的数据。而返回多条数据,就可以用 for 遍历所有数据。
documents = myCollection.find()
for document in documents:
    print(document)
  • 基本结构就是如上所示,在()中可以加各种 筛选条件,下面举例介绍:
#	字段相符
myCollection.find({'age': 4, 'name': 'Tom'})

#	嵌入字段相符
#	比如有一个属性 address,其值也是一个字典,含有 zipcode 和 street
#	我们只想筛选某一个 zipcode
myCollection.find({'address.zipcode': '10075'})

#	大于操作符 $gt、小于操作符 $lt
myCollection.find({'grades.score': {'$lt': 10}})

#	第一个字母 ASCII 值大于 H
myCollection.find({'name': {'$gt': 'H' }})

#	或逻辑 $or
myCollection.find({'$or': [{'cuisine': 'Italian'}, {'zipcode': '10075'}]})

#	正则表达式 $regex
myCollection.find{'name': {'$regex': '^R'}}

结果排序:sort()

  • 支持多段排序,pymongo.ASCENDING 表示升序,pymongo.DESCENDING 表示降序
myCollection.find().sort([
    ("borough", pymongo.ASCENDING),
    ("address.zipcode", pymongo.ASCENDING)
])

限制返回条数:limit()

myCollection.find().limit(3)

更新数据

更新一条数据:update_one(),更新多条数据:update_many()

  • 输入两个参数,第一个是筛选器 ,与查询数据相同,第二个是修改语句
  • 通常我们使用的是更改操作符:$set
result = myCollection.update_many(
    {"address.zipcode": "10016", "cuisine": "Other"},
    {
        "$set": {"cuisine": "Category To Be Determined"},
        "$currentDate": {"lastModified": True}
    }
)
#	符合条件的文档数目
print(result.matched_count)
#	被修改的文档数目
print(result.modified_count)
  • 上面的 $currentData 为另一个操作符,所有操作符参考官方文档。
  • 如果 $set 字段不存在,会新建字段

删除数据

删除一条数据:delete_one(),删除多条数据:delete_many()

result = myCollection.delete_many({"borough": "Manhattan"})
#	删除数量
print(result.deleted_count)

删除一个集合:drop()

myCollection.drop()

数据聚合

  • 所谓数据聚合,就是分类把一组数据聚合成一条信息。比如下面这个例子:
cursor = myCollection.aggregate(
    [
        {"$group": {"_id": "$borough", "count": {"$sum": 1}}}
    ]
)
  • 上面的代码也就是统计出每个不同的 borough 有多少条记录。
  • 当然数据聚合也有很多操作符,比如可以进行筛选后再聚合:
cursor = myCollection.aggregate(
    [
        {"$match": {"borough": "Queens", "cuisine": "Brazilian"}},
        {"$group": {"_id": "$address.zipcode", "count": {"$sum": 1}}}
    ]
)

更多操作符

  • 上面展示的搜索、更新操作符都是常用的操作符,官方文档上可以查询所有操作符。
  • 网址:https://docs.mongodb.com/manual/crud/

本文章使用limfx的vsocde插件快速发布