非关系型数据库MongoDB是文档数据库,所有的数据以文档形式储存
例如:如果要保存博客和相关的评论,使用关系型数据库,需要至少建立两个表:t_blogs和t_comments。前者用于保存博文,后者用于保存与博文相关的评论,然后通过键值将两个表关联,t_blogs和t_comments通常是一对多的关系。
直接将博文以及博文下的所有评论放在一个文档中储存,也就是将相关的数据都放在一起,无须关联,查询速度更快。
与关系型数据库类似,都需要先连接数据库、创建表、查询数据等
只不过MongoDB数据库没有表的概率,一切都是文档(主要指的是列表和字典)
from pymongo import *
# 连接MongoDB数据库
Client=MongoClient()
# 打开或创建名为data的collection,collection相当于关系型数据库中的数据库
# 在MongoDB中,collection是文档的集合
db=Client.data
# 或者使用类似引用字典值的方式打开或创建collection
# db=Client['data']
# 定义要插入的文档(字典)
person1={"name":"bill","age":55,"address":"地球","salary":1234.0}
person2={"name":"mike","age":12,"address":"火星","salary":434.0}
person3={"name":"john","age":43,"address":"月球","salary":6543.0}
# 创建或打开一个名为persons的文档,persons相当于关系型数据库中得表
persons=db.persons
# 先删除persons文档中得所有数据,以免多次运行程序导致文档中有大量重复数据
persons.delete_many({'age':{'$gt':0}})
# 使用insert_one方法插入文档
personId1=persons.insert_one(person1).inserted_id
personId2=persons.insert_one(person2).inserted_id
personId3=persons.insert_one(person3).inserted_id
print(personId3)
"""
也可以使用insert_many方法一次性插入多个文档
personList=[person1,person2,person3]
result=person.insert_many(personList)
print(result.inserted_ids)
"""
# 搜索persons文档中得第一个子文档,相当于关系型数据库中得记录
print(persons.find_one())
print(persons.find_one()['name'])
# 搜索所有数据
for person in persons.find():
print(person)
print('-----------------')
# 更新第一个满足条件的文档中得数据,使用update_many方法可以更新所有满足条件的文档
persons.update_one({'age':{'$lt':50}},{'$set':{'name':'超人'}})
persons.delete_one({'age':{'$gt':0}}) #只删除满足条件的第一个文档
# 搜索所有满足age小于50的文档
for person in persons.find({'age':{'$lt':50}}):
print(person)
print('------------')
# 搜索所有满足age大于50的文档
for person in persons.find({'age':{'$gt':50}}):
print(person)
# 输出persons中得文档总数
print('总数','=',persons.estimated_document_count())