MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB文档类似于JSON对象。字段值可以包含其他文档,数组及文档数组。
主要特点:
MongoDB是一个面向文档存储的数据库,操作起来比较简单和容易。 你可以在MongoDB记录中设置任何属性的索引(如:FirstName="Sameer",Address="8GandhiRoad")来实现更快的排序。 你可以通过本地或者网络创建数据镜像,这使得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工具:
使用于MongoDB管理的工具包括监控工具和GUI
监控:
MongoDB提供了网络和系统监控工具Munin,它作为一个插件应用于MongoDB中。
Gangila是MongoDB高性能的系统监视的工具,它作为一个插件应用于MongoDB中。
基于图形界面的开源工具Cacti,用于查看CPU负载,网络带宽利用率,它也提供了一个应用于监控MongoDB的插件。
GUI:
FangofMongo–网页式,由Django和jQuery所构成。 Futon4Mongo–一个CouchDBFutonweb的mongodb山寨版。 Mongo3–Ruby写成。 MongoHub–适用于OSX的应用程序。 Opricot–一个基于浏览器的MongoDB控制台,由PHP撰写而成。 DatabaseMaster—Windows的mongodb管理工具 RockMongo—最好的PHP语言的MongoDB管理工具,轻量级,支持多国语言.(1)windows平台安装MongoDB
下载地址:https://www.mongodb.com/download-center#community
直接下载安装文件,然后选择安装路径安装即可,安装完成后通过系统服务启动mongdb
(2)linux平台安装MongoDB
#wgethttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel62-4.0.0.tgz #tarxfmongodb-linux-x86_64-rhel62-4.0.0.tgz #mvmongodb-linux-x86_64-rhel62-4.0.0/usr/local/mongod #echo"exportPATH=$PATH:/usr/local/mongodb/bin">>/etc/profile #./etc/profile #创建数据目录 #mkdir-p/data/db #启动服务 #mongod更多安装详细:https://docs.mongodb.com/manual/installation/
(1)创建操作
创建或插入操作将新的文档添加到集合中,如果集合不存在则插入操作将创建该集合
db.collection.insertOne()插入单个文档
db.collection.insertMany()插入多个文档
db.collection.insert()将单个或多个文档插入到集合中
>db.dba.insertOne({item:"card",qty:15}) { "acknowledged":true, "insertedId":ObjectId("5b35cabe638a2654f3efaa8f") } > #指定_id插入文档 >db.dba.insertOne({_id:1,item:"python",qty:100}) {"acknowledged":true,"insertedId":1} #插入多个文档 >db.dba.insertMany([{_id:2,item:"java",qty:88},{_id:3,item:javascript,qty:77},{_id:4,item:django,qty:66}]) {"acknowledged":true,"insertedIds":[2,3,4]}(2)查询操作
读取操作从集合中检索文档
db.collection.find()
>db.dba.find()#查询集合所有 >db.dba.find({_id:1})#查询_id为1的文档 >db.dba.find({_id:{$gt:2}})#查询_id大于2的文档(3)更新操作
db.collection.updateOne()更新单个文档
db.collection.updateMany()更新多个文档
db.collection.replaceOne()替换文档
db.dba.updateOne({item:"python"},{$set:{qty:111}})#修改item为python的qty为111 #将data字段更新为当前日期,如果不存在则创建该字段 db.dba.updateOne({item:"python"},{$currentDate:{data:true}}) #将_id大于2的文档修改qty的值并设置date字段为当前时间 db.dba.updateMany({_id:{$gt:2}},{$set:{qty:"hello"},$currentDate:{date:true}}) #将_id为1的字段替换掉 db.dba.replaceOne({_id:1},{_id:1,item:"abc",qty:333,data:2018})(4)删除操作
db.collection.deleteOne()#删除一条文档
db.collection.deleteMany()#删除多条文档
#删除指定条件的一条文档 db.dba.deleteOne({_id:1}) #删除集合所有文档 db.dba.deleteMany({}) #删除_id大于3的文档 db.dba.deleteMany({_id:{$gt:3}})(1)安装MongoDB驱动程序
pipinstallpymongo(2)链接MongoDB
client=pymongo.MongoClient(host=localhost,port=27017) #或者 client=pymongo.MongoClient(mongodb://localhost:27017/)(3)指定数据库
db=client.dba #或者 db=client[dba](4)指定集合
collection=db.dba #或者 collection=db[dba](5)插入数据
#插入数据单条数据 student={ _id:1, name:python, age:200, } #result=collection.insert(student) #print(result)#返回一个InsertOneResult实例 #插入多条数据 suudentany=[ {_id:2,name:java,age:300}, {_id:3,name:javascript,age:400}, {_id:4,name:c++,age:500} ] #result=collection.insert_many(suudentany) #print(result) #print(result.inserted_ids)#显示插入数据id列表(6)查询数据
result=collection.find_one({name:python})#查询单条数据 print(type(result))#返回字典类型 print(result) #查询多条数据,需要迭代读取 resultall=collection.find() foriinresultall: print(i)过滤查询匹配的文档
resultfiter=collection.find({age:{$gt:300}})#查询age大于300的文档 foriinresultfiter: print(i) # {_id:3,name:javascript,age:400} {_id:4,name:c++,age:500}比较符号还有:$lt小于、$gt大于、$lte小于等于、$gte大于等于、$ne不等于、$in在范围内、$nin不在范围内
另外还可以用正则匹配$regex
result=collection.find({name:{$regex:^p.*}})#匹配以P开头的name其他功能符号:$exists属性是否存在、$type类型判断、$mod数字余数、$text文本查询、$shere条件查询
更多详细用法可以在MongoDB官网找到:https://docs.mongodb.com/manual/reference/operator/query/
(7)计数
要统计查询结果有多少条数据,可以调用count()方法
count=collection.find().count() #或者统计符合条件的数据 count=collection.find({age:20}).count()(8)排序
排序时,直接调用sort()方法,并在其中传入排序的字段及升降序标志即可
pymongo.ASCENDING为升序,pymongo.DESCENDING为降序
results=collection.find().sort(name,pymongo.ASCENDING)(9)偏移
如只想去某几个元素,可以利用skip()方法偏移位置来忽略前面的元素
results=collection.find().sort(name,pymongo.ASCENDING).skip(2)#只取第三个及后面的元素另外还可以使用limit()方法指定要取的结果个数
results=collection.find().sort(name,pymongo.ASCENDING).skip(2).limit(2)#只取两个结果(10)更新
可以使用update()方法来更新数据,但此方法不够安全可以使用$set它只更新存在文档内存在的字段
result=collection.update({name:python},{date:8}) #上面方法不安全,它会将除了_id和要更新的数据外的其他字段会被删除 #使用$set会比较安全 result=collection.update({name:python},{$set:{date:12}})官方推荐使用update_one()和update_many()方法,来严格控制影响的字段,它需要使用$类型的操作字符来作为字典的键名
result=collection.update_one({_id:3},{$set:{name:javascript}}) print(result) print(result.matched_count,result.modified_count)#打印匹配的数据条数和影响的数据条数 #updata_many()会将所有符合条件的数据都更新 result=collection.update_many({date:{$gt:2}},{$inc:{data:10}})#将所有date值大于2的文档加上10(11)删除
删除可以使用的方法有remove()符合条件的数据都会被删除,delete_one()值删除符合条件的第一条和delete_many()删除所有符合条件的
result=collection.delete_one({name:java}) result1=collection.delete_many({data:{$gt:20}})(12)其他操作
pyMongo还提供了一些组合方法:
find_one_and_delete()查找后删除
find_one_and_replace()查找后替换
find_one_and_update()查找后更新
create_index()在集合上创建索引
create_indexes()在集合上创建一个或多个索引
drop_index()删除此集合上的索引
更多集合操作方法:http://api.mongodb.com/python/current/api/pymongo/collection.html
pymongo的API文档:http://api.mongodb.com/python/current/api/pymongo/index.html
本文内容总结:1、MongoDB简介,2、MongoDB安装,3、mongoDB基本操作,4、python使用MongoDB,
原文链接:https://www.cnblogs.com/zhangxinqi/p/9242687.html