python之mongodb学习
1.首先,先来介绍一下mongdb数据库
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
主要特点:
MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
你可以在MongoDB记录中设置任何属性的索引 (如:FirstName=“Sameer”,Address=“8 Gandhi Road”)来实现更快的排序。
你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
mongodb与mysql命令对比 传统的关系数据库一般由数据库(database)、表(table)、记录(record)三个层次概念组成,
我们简单来说硕Mongodb的特点:
MongoDB是由数据库(database)、集合(collection)、文档对象(document)三个层次组成。
MongoDB对于关系型数据库里的表,但是集合中没有列、行和关系概念,这体现了模式自由的特点。
2.安装使用mongodb数据库
安装的话,大家自行百度就ok了!!!
接下来我们开始使用mongodb
(1)引入pymongo并且建立连接
#引入模块
import pymongo
#建立连接(IP和端口)
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
#myclient = pymongo.MongoClient("localhost",27017)
3.创建数据库
首先说明一下,mongodb不需要自己创建数据库,可以直接使用的,可以自动创建的。
#mydb = myclient["test"]
#两种方式都可以
mydb = myclient.test
4.创建集合
注意: 在 MongoDB 中,集合只有在内容插入后才会创建!也就是说,我们需要先创建集合(也就是数据表),再插入一条记录,数据表才会真正创建。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
#创建数据库
mydb = myclient.testdb
#创建表
mycol = mydb.table
5.插入数据
有两种插入数据的方法:save() VS insert()
但两者是有两个区别:
一、save函数实际就是根据参数条件,调用了insert或update函数.如果想插入的数据对象存在,insert函数会报错,而save函数是改变原来的对象;如果想插入的对象不存在,那么它们执行相同的插入操作.
二、insert可以一次性插入一个列表,而不用遍历,效率高, save则需要遍历列表,需要一个个插入。
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.testdb
mycol = mydb.table
#插入数据
mycol.insert({"name":'john','province':'浙江','age':24})
结果:
在MongoDB中,每条数据其实都有一个_id属性来唯一标识。如果没有显式指明该属性,MongoDB会自动产生一个ObjectId类型的_id属性。insert()方法会在执行后返回_id值。
插入多条数据
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.insert
mycol = mydb.table
mycol.insert([{"name":'john','province':'浙江','age':24},
{"name":'wangsan','province':'西安','age':12},
{"name":'lisi','province':'陕西','age':22},
])
结果:
上面利用insert演示,但是官方推荐使用insert_one()和insert_many()方法来分别插入单条记录和多条记录。
6.查询语句
插入数据后,可以利用find_one()或find()方法进行查询,其中find_one()查询得到的是单个结果,find()则返回一个生成器对象.
(1)查询单条语句find_one
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.insert
mycol = mydb.table
mycol.insert([{"name":'john','province':'浙江','age':24},
{"name":'wangsan','province':'西安','age':12},
{"name":'lisi','province':'陕西','age':22},
])
resuit = mycol.find_one({"name":"wangsan"})
print(resuit);
结果:
{'_id': ObjectId('5bea02f229b57602d039f4eb'), 'name': 'wangsan', 'province': '西安', 'age': 12}
(2)查询多条我们可以使用find语句
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.insert
mycol = mydb.table
mycol.insert([{"name":'john','province':'浙江','age':24},
{"name":'wangsan','province':'西安','age':20},
{"name":'lisi','province':'陕西','age':20},
])
resuit = mycol.find_one({"name":"wangsan"})
print(resuit);
#查找多条
results = mycol.find({"age":20})
print(results)
for result in results:
print(result)
结果:
{'_id': ObjectId('5bea02f229b57602d039f4eb'), 'name': 'wangsan', 'province': '西安', 'age': 12}
<pymongo.cursor.Cursor object at 0x00000000027504A8>
{'_id': ObjectId('5bea05e629b5761010ddd735'), 'name': 'wangsan', 'province': '西安', 'age': 20}
{'_id': ObjectId('5bea05e629b5761010ddd736'), 'name': 'lisi', 'province': '陕西', 'age': 20}
7.更新删除
更新update
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.testdb
mycol = mydb.table
#更新name
mycol.update({'name':'john'},{'$set':{"name":"30"}})
#检查是否更新
result = mycol.find_one({"name":"30"})
print(result)
结果:
{'_id': ObjectId('5be8c5b229b5760440220de3'), 'name': '30', 'province': '浙江', 'age': 24}
删除remove
import pymongo
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient.testdb
mycol = mydb.table
#删除
mycol.remove({"name":"30"})
#检查
result = mycol.find_one({"name":"30"})
print(result)