当前位置: 首页 > 后端技术 > Python

MongoDB使用教程

时间:2023-03-26 11:15:25 Python

作者changhao邮箱1.0版知识点Mongodb安装mongo命令使用mongo基本操作pymongo模块使用Mongodb安装windows安装方法1)。下载安装包MongoDB提供了32位和64位系统的预编译二进制包,您可以从MongoDB官网下载安装。MongoDB预编译二进制包下载地址为:https://www.mongodb.com/downl...2)。指定安装路径进行安装,我这里安装在D:\software\mongodb中,在环境变量中添加D:\software\mongodb\bin。3).新建目录和文件夹D:\software\mongodb\data\dbD:\software\mongodb\log\mongod.log4)。新建配置文件D:\software\mongodb\mongod.cfgsystemLog:destination:filepath:"D:/software/mongodb/log/mongod.log"logAppend:truestorage:journal:enabled:truedbPath:"D:/软件/mongodb/data/db"net:bindIp:0.0.0.0端口:27017setParameter:enableLocalhostAuthBypass:false5)。makesystemservicemongod--config"D:\software\mongodb\mongod.cfg"--bind_ip0.0.0.0--直接在命令行安装或指定配置mongod--bind_ip0.0.0.0--port27017--logpathD:\software\mongodb\log\mongod.log--logappend--dbpathD:\software\mongodb\data\db--serviceName"mongodb"--serviceDisplayName"mongodb"--install6).启动MongoDB服务netstartMongoDBnetstopMongoDB7).登录MongoDBmongo链接:http://www.runoob.com/mongodb/mongodb-window-install.html没有账号密码登录时,默认是管理员登录。,因为刚才安装系统服务的时候没有指定--auth(如果不指定就没有权限认证),(相当于mysql跳过授权表启动)8).创建一个有权限的用户useadmindb.createUser({user:"root",#这个root可以随便写pwd:"123",roles:[{role:"root",db:"admin"}]#Permission,roleisroot表示它是管理员,})usetestdb.createUser({user:"test",pwd:"123",roles:[{role:"readWrite",db:"test"},#Havereadandtest库有写权限,自己库有读写权限{role:"read",db:"db1"}]#db1库有读权限,其他库有读权限})9).重启数据库mongod--removemongod--config"D:\software\mongodb\mongod.cfg"--bind_ip0.0.0.0--install--auth#或者mongod--bind_ip0.0.0.0--port27017--logpathD:\software\mongodb\log\mongod.log--logappend--dbpathD:\software\mongodb\data\db--serviceName"MongoDB"--serviceDisplayName"MongoDB"--install--auth10).重新登录#方法一mongo--port27017-u"root"-p"123"--authenticationDatabase"admin"#方法二:登录后使用db.auth("account","password")登录进入mongouseadmindb.auth("root","123")Linux安装方法1)。安装依赖yuminstall-ylibcurlopenssl2).下载MongoDB源码安装或yummanager安装#mongodb源码下载地址https://www.mongodb.com/download-center#community#或yum安装yuminstall-ymongodb3)。创建数据库目录#创建目录并设置用户权限mkdir-p/var/lib/mongomkdir-p/var/log/mongodbchown`whoami`/var/lib/mongochown`whoami`/var/log/mongodb4).配置mongo服务参数允许所有ip访问mongod--dbpath/var/lib/mongo--logpath/var/log/mongodb/mongod.log--bind_ip_all--fork5)。或修改配置文件/etc/mongod.conf#mongod.conf#所有选项的文档,参见:#http://docs.mongodb.org/manual/reference/configuration-options/#Whereandhowtostoredata.storage:dbPath:/var/lib/mongojournal:enabled:true#engine:#mmapv1:#wiredTiger:#wheretowriteloggingdata.systemLog:destination:filelogAppend:true路径:/var/log/mongodb/mongod.log#networkinterfacesnet:port:27017bindIp:true#进程如何运行processManagement:timeZoneInfo:/usr/share/zoneinfo6)。在后台启动mongod-f/etc/mongod.conf&7)。登录mongodb#登录mongo#创建数据库testusetest#查看当前数据库dbmongo命令Use#连接任意数据库configmongo127.0.0.1:27017/config#不连接任何数据库mongo--nodb#启动后,需要时运行newMongo(hostname)命令连接到你要的mongod是conn=newMongo('127.0.0.1:27017')db=conn.getDB('admin')#显示当前数据库中的所有数据库showdatabases或showdbs#使用某个数据库,创建it如果不存在usedatabase#deletedatabasedb.dropDatabase()mongo基本操作MongoDB相关术语解释与sql术语对应SQL术语MongoDB术语解释/说明databasedatabase数据库tablecollectiondatabasetable/collectionrowdocument数据库记录行/文档columnfielddatafield/fieldindexindextablejoinstablejoins,MongoDB不支持primarykeyprimarykey主键,MongoDB自动设置_id字段为主键一些数据库名是保留的,可以直接访问se特殊角色databasesadmin:从权限的角度来看,这是如果一个用户被添加到“root”数据库,该用户自动继承所有的数据库权限。一些特定的服务器端命令也只能从此数据库运行,例如列出所有数据库或关闭服务器。本地:此数据永远不会被复制,可用于存储仅限于单个本地服务器的任何集合。config:当使用Mongo进行分片设置时,内部使用config数据库存储分片信息。集合(表)的增删改查使用test#添加表内容db.table1.insert({"a":1})db.table2.insert({"b":2})#查看表showcollectionsorshowtables#删除db.user.info.help()#查看帮助db.user.info.drop()#帮助,不懂的直接help()db.table.help()#添加示例operation#插入单条数据user0={"name":"changhao","age":"23","hobbies":['music','read','dancing'],"addr":{"country":'China',"city":'BJ',}}#方法一db.table1.insert(user0)#方法二db.table1.insertOne(user0)#插入多条数据user1={"_id":1,"name":"changhao1","age":"23","hobbies":['音乐','阅读','跳舞'],"addr":{"country":'中国',"city":'BJ',}}user2={"_id":2,"name":"changhao2","age":"23","hobbies":['音乐','阅读','dancing'],"addr":{"country":'China',"city":'BJ',}}#方法一db.table1.insertMany(user1,user2)#方法二db.table1.insertMany([user1,user2])搜索操作#查看all记录db.table1.find()#美化输出db.table1.find().pretty()#查找所有db.table1.find({"name":"changhao"})#查找第一个满足条件的项db.table1.findOne({"name":"changhao"})条件查找-比较操作#id=1db.table1.find({"_id":1})#id!=1db.table1.find({"_id":{"$ne":1}})#id<2db.table1.find({"_id":{"$lt":1}})#id>1db.table1.find({"_id":{"$gt":1}})#id>=1db.table1.find({"_id":{"$gt":1}})#id<=2db.table1.find({"_id":{"$lte":1}})条件搜索-逻辑运算#logicaloperation:$and,$or,$not#id>=3andid<=4db.table1.find({"_id":{"$gte":3,"$lte":4}})#id>=3andid<=4andage>=40db.table1.find({"_id":{"$gte":3,"$lte":4},"age":{"$gte":40}})或db.table1.find({"$and":[{"_id":{"$gte":3,"$lte":4}},#字典是条件{"age":{"$gte":40}}]})#id>=0andid<=1orid>=4orname="changhao"db.table1.find({"$or":[{"_id":{"$lte":1,"$gte":0}},{"_id":{"$gte":4}},{"name":"changhao"}]})#id%2=1odddb.table1.find({"_id":{"$mod":[2,1]}})#偶数,反转db.table1.find({"_id":{"$mod":[2,1]}})正则匹配db.table1.find({"name":/^jin.*?(g|n)$/i})排序,skip,intercept#排序,按年龄排序,1个正序,1个反序db.table1.find().sort("age":1)#选择两条数据db.table1.find().limit(2)#跳过查询数据的前两条db.table1.find().skip(2)db.table1.sort({"age":-1}).skip(0).limit(2)记录修改语法格式如下db.collection.update(,,{upsert:,multi:,writeConcern:})参数说明:query:相当于where条件update:update对象和一些更新操作符(如inc...等,相当于set)truetoinsertmulti:可选,默认false,表示只更新第一个找到的记录,设置为true,表示更新所有找到的记录。writeConcern:可选,抛出异常的级别。实用声明#1.覆盖db.table1.update({'age':20},{"name":"changhao"})#2.这是一个简单的更新,完全替换匹配的varobj=db.table1。findOne({"_id":2})obj.username=obj.name+'test'obj.age=23db.table1.update({"_id":1},obj)set#set$setusuallydocumentonly一些部分将需要更新。原子更新修饰符可用于指定应更新文档中的某些字段。update修饰符是一个特殊的键,用于指定复杂的更新操作,如修改、添加、删除等#setname="changhao"whereid=2db.table1.update({'_id':2},{"$set":{"name":"changhao","age":23},{"upsert":true})#如果没有匹配,则添加一个新的{"upsert":true}db.table1.update({'_id':2},{"$set":{"name":"changhao","age":23}},{"upsert":true})#默认只匹配成功的第一项,{"multi":更改多个项目}db.table1.update({'_id':{"$gt":4}},{"$set":{"age":28}})db.table1.update({'_id':{"$gt":4}},{"$set":{"age":38}},{"multi":true})#修改嵌入文档,把名字为testChangetheaddresscountrytoJapandb.table1.update({'name':"test"},{"$set":{"addr.country":"Japan"}})#更改名字人的地址istestChange2hobbiestopiaodb.table1.update({'name':"test"},{"$set":{"hobbies.1":"piao"}})#删除测试爱好,$unsetdb.table1.update({'name':"test"},{"$unset":{"hobbies":""}})Increaseanddecrease#增加和减少$inc#1.所有年龄增加一年db.table1.update({},{"$inc":{"age":1}},{"multi":true})#2.将所有人的年龄减少5岁db.user.update({},{"$inc":{"age":-5}},{"multi":true})Delete#删除第一个ofmultipledb.table1.deleteOne({"age":8})#删除国家为ChinaAlldb.table1.deleteMany({"addr.country":"China"})pymongo模块用于连接数据库importpymongoclient=pymongo.MongoClient("192.168.158.137",27017)#显示服务器上的所有数据库dblist=client.database_names()print(dblist)#打印信息:['admin','config','local','test']#连接数据库,获取库,如果库名存在,则使用,如果存在不存在createdb=client['test']增加数据库内容#增加单项mydict={"name":"changhao001","age":23}res=db.table1.insert_one(mydict)print(res.inserted_id)#返回ObjectId对象#添加多个itemmylist=[{"name":"changhao002","age":23},{"name":"changhao003","age":23}]res=db.table1.insert_many(mylist)print(res.inserted_ids)#返回ObjectId对象列表QuerystatementQueryastatement#查询一条数据res1=db.table1.find_one({'name':'changhao1'})print(res1.items())#查看查询集中所有匹配的数据内容Dataormultiple#查询所有数据in集合或多个res2=db.stu.find({})#查询所有记录res3=db.stu.find({"age":23})高级查询#年龄大于20岁myquery={"age":{"$gt":20}}res=db.table1.find(myquery)正则表达式查询#读取name字段首字母为"c"的数据myquery={"name":{"$regex":"^c"}}res=db.e1.find(myquery)#遍历匹配数据forxinres:print(x)查询结果排序、跳转、截取#查询结果排序、跳转、截取sort_res=list(db.table1.find().sort("age",pymongo.DESCENDING))#查询所有结果,并按年龄降序排列skip_res=list(db.table1.find().skip(2))#查询所有结果,过滤掉第一个twolimit_res=list(db.table1.find().limit(2))#查询所有结果,截取前两个#分页效果pagination_res=list(db.table1.find().sort("age",pymongo.DESCENDING).limit(2).skip(2))修改语句#查询直接更新设置值res=db.table1.update_one({'_id':1},{"$set":{"name":"changhao_update"}})print(res.modified_count)#查询记录,在字典中添加值res=db.table1.find_one({"name":"changhao_update"})res['age']=20#更新记录的值res=db.table1.update_one({"name":"changhao_update"},{"$set":res})print(res.modified_count)delete语句deletesingleentry#删除结果Oneres=db.table1.delete_one({"name":"changhao_update"})print(res.deleted_count)deletemultiple#删除多个,正则匹配数据query={"name":{"$regex":"^c"}}res=db.table1.delete_many(query)print(res.deleted_count)#删除所有del_res=db.table1.delete_many({})