文章目录

  • 非关系型数据库
  • NoSQL介绍
  • MongoDB
  • PyMongo:MongoDB 和 Python
  • 常规操作
  • 插入
  • 删除
  • 修改
  • 查询


非关系型数据库

NoSQL介绍

. NoSQL的意思是Not Only SQL,也指非关系型数据库。通常在Web上会产生大量的数据,且产生数据的速率可能比关系型数据库要更加快,因此 NoSQL 数据库的发展能很好的处理这些大的数据。
  NoSQL数据库的类型也比较多,按照存储类型通常分为列存储、文档存储、key-value存储、图存储、对象存储、xml数据库

MongoDB

. MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。它介于简单的键-值对存储与列存储之间。一般情况下其数据会另存为 JSON 对象,并且允许诸如字符串、数值、列表甚至嵌套等数据类型。
  MongoDB 将数据存储于其特殊的 JSON 文档中,可以将其想象为一个 Python 字典,由于它是一个二进制编码的序列化,因此通常也会称其为 BSON 格式。

PyMongo:MongoDB 和 Python

. PyMongo是最正式的MongoDB驱动程序,以下是使用PyMongo的简单示例:

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017")
mydb = myclient["mydb"]
mycol = mydb["mycol"]
mydist = {"name":"tom","age":18}

x = mycol.insert_one(mydist)
print(x)

dblist = myclient.list_database_names()
collist = mydb.list_collection_names()

if "mydb" in dblist:
    print("数据库存在")

if "mycol" in collist:
    print("集合存在")

. 值得注意的是如果没有insert_one这一步,下面的输出都不会出现,因为MongoDB中数据库和集合的建立都是在插入记录后才会真正的建立。

常规操作

插入

import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017")
mydb = myclient["mydb"]
mycol = mydb["mycol"]
mydist = {"name":"tom","age":18,"sex":"man"}    #没有指定_id字段,会自动给一个

#增加一条数据
mycol.insert_one(mydist)

#增加一组数据
mydists = [
    {"_id":1,"name":"jerry","age":18,"sex":"man"},    #可以指定_id字段
    {"_id":2,"name":"alex","age":19,"sex":"man"},
    {"_id":3,"name":"jack","age":20,"sex":"man"}
    ]
mycol.insert_many(mydists)

删除

#条件
myquery = {"name":"tom"}
#删除一条数据
mycol.delete_one(myquery)

myquery2 = {"age":{"$gte":19}}
#删除多条数据
mycol.delete_many(myquery2)

#传入参数为空字典时,表示删除所有数据
mycol.delete_many({})

#删除集合
mycol.drop()

修改

myquery = {"name":"tom"}
newvalue = {"$set":{"age":19}}
mycol.update_one(myquery,newvalue)      #修改一条数据,也就是只匹配第一个

#查询条件,名字以j开头的
myquery = {"name":{"$regex":"^j"}}
newvalue = {"$set":{"age":22}}
mycol.update_many(myquery,newvalue)	#修改多条数据

查询

#查询一条数据
x = mycol.find_one()
print(x)

#按条件查询数据,这里表示查询age的值小于19的
myquery = {"age":{"$lt":19}}
mydoc = mycol.find(myquery)
for x in mydoc:
    print(x)
    
没有参数或参数为空字典表示查询所有的
for x in mycol.find():
    print(x)

#第二个参数为字段设置0或1,表示查询结果是否显示这个字段
for x in mycol.find({},{"_id":0}):
    print(x)
#但是除了_id以外,其他设置的字段不能同时指定0和1
for x in mycol.find({},{"name":0,"age":1}):	#报错
    print(x)