MongoDB日常运维操作命令小结
总所周知,MongoDB是一个NoSQL非数据库系统,即一个数据库可以包含多个集合(Collection),每个集合对应于关系数据库中的表;而每个集合中可以存储一组由列标识的记录,列是可以自由定义的,非常灵活,由一组列标识的实体的集合对应于关系数据库表中的行。下面通过熟悉MongoDB的基本管理命令,来了解MongoDB提供的DBMS的基本功能和行为。 0)MongoDB的安装 [root@centos6-vm01~]#curl-Ohttps://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz [root@centos6-vm01~]#tar-zxvfmongodb-linux-x86_64-3.0.6.tgz [root@centos6-vm01~]#mvmongodb-linux-x86_64-3.0.6//usr/local/mongodb [root@centos6-vm01~]#vim/etc/profile ...... exportPATH=$PATH:/usr/local/mongodb/bin/ [root@centos6-vm01~]#source/etc/profile 启动mongodb [root@centos6-vm01~]#mkdir-p/data/db [root@centos6-vm01~]#cd/usr/local/mongodb/bin/ [root@centos6-vm01bin]#./mongod& [root@centos6-vm01bin]#lsof-i:27017 COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME mongod24304root5uIPv41873600t0TCP*:27017(LISTEN) mongod24304root12uIPv41874560t0TCPlocalhost:27017->localhost:48742(ESTABLISHED) mongo24319root3uIPv41874550t0TCPlocalhost:48742->localhost:27017(ESTABLISHED) ----------------------------------------------------- 连接mongodb报错: Failedglobalinitialization:BadValueInvalidornouserlocaleset.PleaseensureLANGand/orLC_*environmentvariablesaresetcorrectly. 解决办法: [root@centos6-vm01~]#vim/etc/profile ...... exportLC_ALL=C [root@centos6-vm01~]#source/etc/profile ----------------------------------------------------- 1)MongoDB命令帮助系统在安装MongoDB后,启动服务器进程(mongod),可以通过在客户端命令mongo实现对MongoDB的管理和监控。看一下MongoDB的命令帮助系统: [root@centos6-vm01~]#mongo MongoDBshellversion:3.0.6 connectingto:test WelcometotheMongoDBshell. Forinteractivehelp,type"help". Formorecomprehensivedocumentation,see http://docs.mongodb.org/ Questions?Trythesupportgroup http://groups.google.com/group/mongodb-user Serverhasstartupwarnings: 2018-01-02T23:24:23.304+0000ICONTROL[initandlisten]**WARNING:Youarerunningthisprocessastherootuser,whichisnotrecommended. 2018-01-02T23:24:23.304+0000ICONTROL[initandlisten] 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten] 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten]**WARNING:/sys/kernel/mm/transparent_hugepage/enabledis'always'. 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten]**Wesuggestsettingitto'never' 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten] 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten]**WARNING:/sys/kernel/mm/transparent_hugepage/defragis'always'. 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten]**Wesuggestsettingitto'never' 2018-01-02T23:24:23.307+0000ICONTROL[initandlisten] >help db.help()helpondbmethods db.mycoll.help()helponcollectionmethods sh.help()shardinghelpers rs.help()replicasethelpers helpadminadministrativehelp helpconnectconnectingtoadbhelp helpkeyskeyshortcuts helpmiscmiscthingstoknow helpmrmapreduce showdbsshowdatabasenames showcollectionsshowcollectionsincurrentdatabase showusersshowusersincurrentdatabase showprofileshowmostrecentsystem.profileentrieswithtime>=1ms showlogsshowtheaccessibleloggernames showlog[name]printsoutthelastsegmentofloginmemory,'global'isdefault use<db_name>setcurrentdatabase db.foo.find()listobjectsincollectionfoo db.foo.find({a:1})listobjectsinfoowherea==1 itresultofthelastlineevaluated;usetofurtheriterate DBQuery.shellBatchSize=xsetdefaultnumberofitemstodisplayonshell exitquitthemongoshell > 这是MongoDB最顶层的命令列表,主要告诉我们管理数据库相关的一些抽象的范畴:数据库操作帮助、集合操作帮助、管理帮助。如果你想了解数据库操作更详细的帮助命令,可以直接使用db.help(),如下所示: >db.help() DBmethods: db.adminCommand(nameOrDocument)-switchesto'admin'db,andrunscommand[justcallsdb.runCommand(...)] db.auth(username,password) db.cloneDatabase(fromhost) db.commandHelp(name)returnsthehelpforthecommand db.copyDatabase(fromdb,todb,fromhost) db.createCollection(name,{size:...,capped:...,max:...}) db.createUser(userDocument) db.currentOp()displayscurrentlyexecutingoperationsinthedb db.dropDatabase() db.eval()-deprecated db.fsyncLock()flushdatatodiskandlockserverforbackups db.fsyncUnlock()unlocksserverfollowingadb.fsyncLock() db.getCollection(cname)sameasdb['cname']ordb.cname db.getCollectionInfos() db.getCollectionNames() db.getLastError()-justreturnstheerrmsgstring db.getLastErrorObj()-returnfullstatusobject db.getLogComponents() db.getMongo()gettheserverconnectionobject db.getMongo().setSlaveOk()allowqueriesonareplicationslaveserver db.getName() db.getPrevError() db.getProfilingLevel()-deprecated db.getProfilingStatus()-returnsifprofilingisonandslowthreshold db.getReplicationInfo() db.getSiblingDB(name)getthedbatthesameserverasthisone db.getWriteConcern()-returnsthewriteconcernusedforanyoperationsonthisdb,inheritedfromserverobjectifset db.hostInfo()getdetailsabouttheserver'shost db.isMaster()checkreplicaprimarystatus db.killOp(opid)killsthecurrentoperationinthedb db.listCommands()listsallthedbcommands db.loadServerScripts()loadsallthescriptsindb.system.js db.logout() db.printCollectionStats() db.printReplicationInfo() db.printShardingStatus() db.printSlaveReplicationInfo() db.dropUser(username) db.repairDatabase() db.resetError() db.runCommand(cmdObj)runadatabasecommand.ifcmdObjisastring,turnsitinto{cmdObj:1} db.serverStatus() db.setLogLevel(level,<component>) db.setProfilingLevel(level,<slowms>)0=off1=slow2=all db.setWriteConcern(<writeconcerndoc>)-setsthewriteconcernforwritestothedb db.unsetWriteConcern(<writeconcerndoc>)-unsetsthewriteconcernforwritestothedb db.setVerboseShell(flag)displayextrainformationinshelloutput db.shutdownServer() db.stats() db.version()currentversionoftheserver 对数据库进行管理和操作的基本命令,可以从上面获取到。如果想要得到更多,而且每个命令的详细用法,可以使用上面列出的db.listCommands()查询。另一个比较基础的是对指定数据库的集合进行操作、管理和监控,可以通过查询db.mycoll.help()获取到: >db.mycoll.help() DBCollectionhelp db.mycoll.find().help()-showDBCursorhelp db.mycoll.count() db.mycoll.copyTo(newColl)-duplicatescollectionbycopyingalldocumentstonewColl;noindexesarecopied. db.mycoll.convertToCapped(maxBytes)-calls{convertToCapped:'mycoll',size:maxBytes}}command db.mycoll.dataSize() db.mycoll.distinct(key)-e.g.db.mycoll.distinct('x') db.mycoll.drop()dropthecollection db.mycoll.dropIndex(index)-e.g.db.mycoll.dropIndex("indexName")ordb.mycoll.dropIndex({"indexKey":1}) db.mycoll.dropIndexes() db.mycoll.ensureIndex(keypattern[,options]) db.mycoll.explain().help()-showexplainhelp db.mycoll.reIndex() db.mycoll.find([query],[fields])-queryisanoptionalqueryfilter.fieldsisoptionalsetoffieldstoreturn. e.g.db.mycoll.find({x:77},{name:1,x:1}) db.mycoll.find(...).count() db.mycoll.find(...).limit(n) db.mycoll.find(...).skip(n) db.mycoll.find(...).sort(...) db.mycoll.findOne([query]) db.mycoll.findAndModify({update:...,remove:bool[,query:{},sort:{},'new':false]}) db.mycoll.getDB()getDBobjectassociatedwithcollection db.mycoll.getPlanCache()getqueryplancacheassociatedwithcollection db.mycoll.getIndexes() db.mycoll.group({key:...,initial:...,reduce:...[,cond:...]}) db.mycoll.insert(obj) db.mycoll.mapReduce(mapFunction,reduceFunction,<optionalparams>) db.mycoll.aggregate([pipeline],<optionalparams>)-performsanaggregationonacollection;returnsacursor db.mycoll.remove(query) db.mycoll.renameCollection(newName,<dropTarget>)renamesthecollection. db.mycoll.runCommand(name,<options>)runsadbcommandwiththegivennamewherethefirstparamisthecollectionname db.mycoll.save(obj) db.mycoll.stats({scale:N,indexDetails:true/false,indexDetailsKey:<indexkey>,indexDetailsName:<indexname>}) db.mycoll.storageSize()-includesfreespaceallocatedtothiscollection db.mycoll.totalIndexSize()-sizeinbytesofalltheindexes db.mycoll.totalSize()-storageallocatedforalldataandindexes db.mycoll.update(query,object[,upsert_bool,multi_bool])-insteadoftwoflags,youcanpassanobjectwithfields:upsert,multi db.mycoll.validate(<full>)-SLOW db.mycoll.getShardVersion()-onlyforusewithsharding db.mycoll.getShardDistribution()-printsstatisticsaboutdatadistributioninthecluster db.mycoll.getSplitKeysForChunks(<maxChunkSize>)-calculatessplitpointsoverallchunksandreturnssplitterfunction db.mycoll.getWriteConcern()-returnsthewriteconcernusedforanyoperationsonthiscollection,inheritedfromserver/dbifset db.mycoll.setWriteConcern(<writeconcerndoc>)-setsthewriteconcernforwritestothecollection db.mycoll.unsetWriteConcern(<writeconcerndoc>)-unsetsthewriteconcernforwritestothecollection 有关数据库和集合管理的相关命令,是最基础和最常用的,如集合查询、索引操作等。下面通过实际的例子来演示一些常见的命令: 一、基本命令1)show dbs显示当前数据库服务器上的数据库 2)use pagedb切换到指定数据库pagedb的上下文,可以在此上下文中管理pagedb数据库以及其中的集合等 3)show collections显示数据库中所有的集合(collection) 4)db.serverStatus() 查看数据库服务器的状态。有时,通过查看数据库服务器的状态,可以判断数据库是否存在问题,如果有问题,如数据损坏,可以及时执行修复。 5)查询指定数据库统计信息use fragmentdb.stats()查询结果示例如下所示: >usefragment switchedtodbfragment >db.stats() { "db":"fragment", "collections":0, "objects":0, "avgObjSize":0, "dataSize":0, "storageSize":0, "numExtents":0, "indexes":0, "indexSize":0, "fileSize":0, "ok":1 } 6)查询指定数据库包含的集合名称列表db.getCollectionNames()结果如下所示: >db.getCollectionNames() [ "17u", "baseSe", "bytravel", "daodao", "go2eu", "lotour", "lvping", "mafengwo", "sina", "sohu", "system.indexes" ] 二、基本DDL和DML1)创建数据库如果你习惯了关系型数据库,你可能会寻找相关的创建数据库的命令。在MongoDB中,你可以直接通过use dbname来切换到这个数据库上下文下面,系统会自动延迟创建该数据库,例如: >showdbs local0.078GB >useLuceneIndexDB switchedtodbLuceneIndexDB >showdbs local0.078GB >db LuceneIndexDB >db.storeCollection.save({'version':'3.5','segment':'e3ol6'}) WriteResult({"nInserted":1}) >showdbs LuceneIndexDB0.078GB local0.078GB > 可见,在use指定数据库后,并且向指定其中的一个集合并插入数据后,数据库和集合都被创建了。 2)删除数据库直接使用db.dropDatabase()即可删除数据库。 3)创建集合可以使用命令db.createCollection(name, { size : ..., capped : ..., max : ... } )创建集合,示例如下所示: >db.createCollection('replicationColletion',{'capped':true,'size':10240,'max':17855200}) {"ok":1} >showcollections replicationColletion storeCollection system.indexes 4)删除集合删除集合,可以执行db.mycoll.drop()。 5)插入更新记录直接使用集合的save方法,如下所示: >db.storeCollection.save({'version':'3.5','segment':'e3ol6'}) WriteResult({"nInserted":1}) 更新记录,使用save会将原来的记录值进行覆盖实现记录更新。 6)查询一条记录使用findOne()函数,参数为查询条件,可选,系统会随机查询获取到满足条件的一条记录(如果存在查询结果数量大于等于1)示例如下所示: >db.storeCollection.findOne({'version':'3.5'}) { "_id":ObjectId("5a4c1733f5c45f057ae82292"), "version":"3.5", "segment":"e3ol6" } 7)查询多条记录使用find()函数,参数指定查询条件,不指定条件则查询全部记录。 8)删除记录使用集合的remove()方法,参数指定为查询条件,示例如下所示: >db.storeCollection.remove({'version':'3.5'}) WriteResult({"nRemoved":2}) >db.storeCollection.findOne() null 9)创建索引可以使用集合的ensureIndex(keypattern[,options])方法,示例如下所示: >usepagedb switchedtodbpagedb >db.page.ensureIndex({'title':1,'url':-1}) { "createdCollectionAutomatically":true, "numIndexesBefore":1, "numIndexesAfter":2, "ok":1 } >db.system.indexes.find() {"v":1,"key":{"_id":1},"name":"_id_","ns":"pagedb.page"} {"v":1,"key":{"title":1,"url":-1},"name":"title_1_url_-1","ns":"pagedb.page"} 上述,ensureIndex方法参数中,数字1表示升序,-1表示降序。使用db.system.indexes.find()可以查询全部索引。 10)查询索引我们为集合建立的索引,那么可以通过集合的getIndexes()方法实现查询,示例如下所示: >db.page.getIndexes() [ { "v":1, "key":{ "_id":1 }, "name":"_id_", "ns":"pagedb.page" }, { "v":1, "key":{ "title":1, "url":-1 }, "name":"title_1_url_-1", "ns":"pagedb.page" } ] 当然,如果需要查询系统中全部的索引,可以使用db.system.indexes.find()函数。 11)删除索引删除索引给出了两个方法: >db.mycoll.dropIndex(name) 2018-01-02T23:45:50.155+0000EQUERYReferenceError:nameisnotdefined at(shell):1:21 >db.mycoll.dropIndexes() {"ok":0,"errmsg":"nsnotfound"} > 第一个通过指定索引名称,第二个删除指定集合的全部索引。 12)索引重建可以通过集合的reIndex()方法进行索引的重建,示例如下所示: >db.page.reIndex() { "nIndexesWas":2, "nIndexes":2, "indexes":[ { "key":{ "_id":1 }, "name":"_id_", "ns":"pagedb.page" }, { "key":{ "title":1, "url":-1 }, "name":"title_1_url_-1", "ns":"pagedb.page" } ], "ok":1 } 13)统计集合记录数 >usefragment switchedtodbfragment >db.baseSe.count() 36749 上述统计了数据库fragment的baseSe集合中记录数。 14)查询并统计结果记录数 >usefragment switchedtodbfragment >db.baseSe.find().count() 36749 find()可以提供查询参数,然后查询并统计结果。上述执行先根据查询条件查询结果,然后统计了查询数据库fragment的baseSe结果记录集合中记录数。 15)查询指定数据库的集合当前可用的存储空间 >usefragment switchedtodbfragment >db.baseSe.storageSize() 142564096 16)查询指定数据库的集合分配的存储空间 >db.baseSe.totalSize() 144096000 上述查询结果中,包括为集合(数据及其索引存储)分配的存储空间。 三、启动与终止 1)正常启动[root@centos6-vm01 ~]# mongod --dbpath /data/db --logfile /var/mongo.log说明:指定数据存储目录和日志目录 如果采用安全认证模式,需要加上--auth选项,如:[root@centos6-vm01 ~]# mongod --auth --dbpath /data/db --logfile /var/mongo.log 2)以修复模式启动[root@centos6-vm01 ~]# mongod --repair以修复模式启动数据库。 实际很可能数据库数据损坏或数据状态不一致,导致无法正常启动MongoDB服务器,根据启动信息可以看到需要进行修复。或者执行:[root@centos6-vm01 ~]# mongod -f /etc/mongodb.conf --repair 3)终止服务器进程> db.shutdownServer()终止数据库服务器进程。或者,可以直接kill掉mongod进程即可。 四、安全管理 1)以安全认证模式启动[root@centos6-vm01 ~]# mongod --auth --dbpath /usr/mongo/data --logfile /var/mongo.log使用--auth选项启动mongod进程即可启用认证模式。或者,也可以修改/etc/mongodb.conf,设置auth=true,重启mongod进程。 2)添加用户>db.createUser({user: "admin",pwd: "1234!@#$qwer",roles: [ "readWrite", "dbAdmin" ]})添加数据库用户,添加成功,则显示结果如下所示: >db.createUser({user:"admin",pwd:"1234!@#$qwer",roles:["readWrite","dbAdmin"]}) Successfullyaddeduser:{"user":"admin","roles":["readWrite","dbAdmin"]} 3)安全认证前提是必须进入该用户对应的database才行,出现1代表成功> db.auth("admin", "1234!@#$qwer")数据库安全认证。认证成功显示结果: >useadmin switchedtodbadmin >db.auth("admin","1234!@#$qwer") 1 如果是认证用户,执行某些命令,可以看到正确执行结果,如下所示: >db.system.users.find() {"_id":"fragment.admin","user":"admin","db":"fragment","credentials":{"SCRAM-SHA-1":{"iterationCount":10000,"salt":"/QZtFAvcavqZIm15FmbToA==","storedKey":"t91XZuIrnUYtuN1bG+hNg58R+w0=","serverKey":"vZLGW0nVpGSKfUHsS2RABOXhOb4="}},"roles":[{"role":"readWrite","db":"fragment"},{"role":"dbAdmin","db":"fragment"}]} 4、为数据库写数据(同步到磁盘)加锁> db.runCommand({fsync:1,lock:1})说明:该操作已经对数据库上锁,不允许执行写数据操作,一般在执行数据库备份时有用。执行命令,结果示例如下: >db.runCommand({fsync:1,lock:1}) { "info":"nowlockedagainstwrites,usedb.fsyncUnlock()tounlock", "seeAlso":"http://dochub.mongodb.org/core/fsynccommand", "ok":1 } 5)查看当前锁状态> db.currentOp()说明:查询结果如下所示: >db.currentOp() { "inprog":[], "fsyncLock":true, "info":"usedb.fsyncUnlock()toterminatethefsyncwrite/snapshotlock" } 其中,fsyncLock为1表示MongoDB的fsync进程(负责将写入改变同步到磁盘)不允许其他进程执行写数据操作 6)解锁> use admin> db.$cmd.sys.unlock.findOne()说明:执行解锁,结果如下所示: >useadmin switchedtodbadmin >db.$cmd.sys.unlock.findOne() {"ok":1,"info":"unlockcompleted"} 可以执行命令查看锁状态:db.currentOp()状态信息如下: >db.currentOp() {"inprog":[]} 说明当前没有锁,可以执行写数据操作。 五、据备份、恢复与迁移管理 1)备份全部数据库[root@centos6-vm01 ~]# mkdir testbak[root@centos6-vm01 ~]# cd testbak[root@centos6-vm01 ~]# mongodump说明:默认备份目录及数据文件格式为./dump/[databasename]/[collectionname].bson 2)备份指定数据库[root@centos6-vm01 ~]# mongodump -d pagedb说明:备份数据库pagedb中的数据。 3)备份一个数据库中的某个集合[root@centos6-vm01 ~]# mongodump -d pagedb -c page说明:备份数据库pagedb的page集合。 4)恢复全部数据库[root@centos6-vm01 ~]# cd testbak[root@centos6-vm01 ~]# mongorestore --drop说明:将备份的所有数据库恢复到数据库,--drop指定恢复数据之前删除原来数据库数据,否则会造成回复后的数据中数据重复。 5)恢复某个数据库的数据[root@centos6-vm01 ~]# cd testbak[root@centos6-vm01 ~]# mongorestore -d pagedb --drop说明:将备份的pagedb的数据恢复到数据库。 6)恢复某个数据库的某个集合的数据[root@centos6-vm01 ~]# cd testbak[root@centos6-vm01 ~]# mongorestore -d pagedb -c page --drop说明:将备份的pagedb的的page集合的数据恢复到数据库。 7)向MongoDB导入数据[root@centos6-vm01 ~]# mongoimport -d pagedb -c page --type csv --headerline --drop < csvORtsvFile.csv说明:将文件csvORtsvFile.csv的数据导入到pagedb数据库的page集合中,使用cvs或tsv文件的列名作为集合的列名。 需要注意的是,使用--headerline选项时,只支持csv和tsv文件。--type支持的类型有三个:csv、tsv、json其他各个选项的使用,可以查看帮助: [root@centos6-vm01~]#mongoimport--help Usage: mongoimport<options><file> ImportCSV,TSVorJSONdataintoMongoDB.Ifnofileisprovided,mongoimportreadsfromstdin. Seehttp://docs.mongodb.org/manual/reference/program/mongoimport/formoreinformation. generaloptions: --helpprintusage --versionprintthetoolversionandexit verbosityoptions: -v,--verbosemoredetailedlogoutput(includemultipletimesformoreverbosity,e.g.-vvvvv) --quiethidealllogoutput connectionoptions: -h,--host=mongodbhosttoconnectto(setname/host1,host2forreplicasets) --port=serverport(canalsouse--hosthostname:port) authenticationoptions: -u,--username=usernameforauthentication -p,--password=passwordforauthentication --authenticationDatabase=databasethatholdstheuser'scredentials --authenticationMechanism=authenticationmechanismtouse namespaceoptions: -d,--db=databasetouse -c,--collection=collectiontouse inputoptions: -f,--fields=commaseparatedlistoffieldnames,e.g.-fname,age --fieldFile=filewithfieldnames-1perline --file=filetoimportfrom;ifnotspecified,stdinisused --headerlineusefirstlineininputsourceasthefieldlist(CSVandTSVonly) --jsonArraytreatinputsourceasaJSONarray --type=inputformattoimport:json,csv,ortsv(defaultsto'json') ingestoptions: --dropdropcollectionbeforeinsertingdocuments --ignoreBlanksignorefieldswithemptyvaluesinCSVandTSV --maintainInsertionOrderinsertdocumentsintheorderoftheirappearanceintheinputsource -j,--numInsertionWorkers=numberofinsertoperationstorunconcurrently(defaultsto1) --stopOnErrorstopimportingatfirstinsert/upserterror --upsertinsertorupdateobjectsthatalreadyexist --upsertFields=comma-separatedfieldsforthequerypartoftheupsert --writeConcern=writeconcernoptionse.g.--writeConcernmajority,--writeConcern'{w:3,wtimeout:500,fsync: true,j:true}'(defaultsto'majority') 8)从向MongoDB导出数据[root@centos6-vm01 ~]# mongoexport -d pagedb -c page -q {} -f _id,title,url,spiderName,pubDate --csv > pages.csv 说明:将pagedb数据库中page集合的数据导出到pages.csv文件,其中各选项含义:-f 指定cvs列名为_id,title,url,spiderName,pubDate-q 指定查询条件其他各个选项的使用,可以查看帮助: [root@centos6-vm01~]#mongoexport--help Usage: mongoexport<options> ExportdatafromMongoDBinCSVorJSONformat. Seehttp://docs.mongodb.org/manual/reference/program/mongoexport/formoreinformation. generaloptions: --helpprintusage --versionprintthetoolversionandexit verbosityoptions: -v,--verbosemoredetailedlogoutput(includemultipletimesformoreverbosity,e.g.-vvvvv) --quiethidealllogoutput connectionoptions: -h,--host=mongodbhosttoconnectto(setname/host1,host2forreplicasets) --port=serverport(canalsouse--hosthostname:port) authenticationoptions: -u,--username=usernameforauthentication -p,--password=passwordforauthentication --authenticationDatabase=databasethatholdstheuser'scredentials --authenticationMechanism=authenticationmechanismtouse namespaceoptions: -d,--db=databasetouse -c,--collection=collectiontouse outputoptions: -f,--fields=commaseparatedlistoffieldnames(requiredforexportingCSV)e.g.-f"name,age" --fieldFile=filewithfieldnames-1perline --type=theoutputformat,eitherjsonorcsv(defaultsto'json') -o,--out=outputfile;ifnotspecified,stdoutisused --jsonArrayoutputtoaJSONarrayratherthanoneobjectperline --prettyoutputJSONformattedtobehuman-readable queryingoptions: -q,--query=queryfilter,asaJSONstring,e.g.,'{x:{$gt:1}}' -k,--slaveOkallowsecondaryreadsifavailable(defaulttrue) --forceTableScanforceatablescan(donotuse$snapshot) --skip=numberofdocumentstoskip --limit=limitthenumberofdocumentstoexport --sort=sortorder,asaJSONstring,e.g.'{x:1}' 注意:如果上面的选项-q指定一个查询条件,需要使用单引号括起来,如下所示: [root@centos6-vm01~]#mongoexport-dpage-cArticle-q'{"spiderName":"mafengwoSpider"}'-f_id,title,content,images,publishDate,spiderName,url--jsonArray>mafengwoArticle.txt 2018-01-03T08:12:41.234+0800connectedto:localhost 2018-01-03T08:12:41.234+0800exported0records [root@centos6-vm01~]#llmafengwoArticle.txt -rw-r--r--.1rootroot3Jan300:12mafengwoArticle.txt 否则,就会出现下面的错误: ERROR:toomanypositionaloptions 六、远程连接管理 1)基于mongo实现远程连接[root@centos6-vm01 ~]# mongo 192.168.10.220:27017/pagedb或者[root@centos6-vm01 ~]# mongo 192.168.10.220:27017/pagedb -ukevin -p123456kevin 通过mongo实现连接,可以非常灵活的选择参数选项,参看命令帮助,如下所示: [root@centos6-vm01~]#mongo--help MongoDBshellversion:3.0.6 usage:mongo[options][dbaddress][filenames(endingin.js)] dbaddresscanbe: foofoodatabaseonlocalmachine 192.169.0.5/foofoodatabaseon192.168.0.5machine 192.169.0.5:9999/foofoodatabaseon192.168.0.5machineonport9999 Options: --shellruntheshellafterexecutingfiles --nodbdon'tconnecttomongodonstartup-no 'dbaddress'argexpected --norcwillnotrunthe".mongorc.js"fileon startup --quietbelesschatty --portargporttoconnectto --hostargservertoconnectto --evalargevaluatejavascript -h[--help]showthisusageinformation --versionshowversioninformation --verboseincreaseverbosity --ipv6enableIPv6support(disabledbydefault) AuthenticationOptions: -u[--username]argusernameforauthentication -p[--password]argpasswordforauthentication --authenticationDatabaseargusersource(defaultstodbname) --authenticationMechanismargauthenticationmechanism --gssapiServiceNamearg(=mongodb)Servicenametousewhenauthenticating usingGSSAPI/Kerberos --gssapiHostNameargRemotehostnametouseforpurposeof GSSAPI/Kerberosauthentication filenames:alistoffilestorun.fileshavetoendin.jsandwillexitafterunless--shellisspecified 2)基于MongoDB支持的javascript实现远程连接当你已经连接到一个远程的MongoDB数据库服务器(例如,通过mongo连接到192.168.0.184),现在想要在这个会话中连接另一个远程的数据库服务器(192.168.0.197),可以执行如下命令: >varx=newMongo('192.168.10.220:27017') >varydb=x.getDB('pagedb'); >useydb switchedtodbydb >db ydb >ydb.page.findOne() { "_id":ObjectId("4eded6a5bf3bfa0014000003"), "content":"巴黎是浪漫的城市,可是...", "pubdate":"2006-03-19", "title":"巴黎:从布鲁塞尔赶到巴黎", "url":"http://france.bytravel.cn/Scenery/528/cblsegdbl.html" } 上述通过MongoDB提供的JavaScript脚本,实现对另一个远程数据库服务器进行连接,操作指定数据库pagedb的page集合。 如果启用了安全认证模式,可以在获取数据库连接实例时,指定认证账号,例如: >varx=newMongo('192.168.0.197:27017') >varydb=x.getDB('pagedb','shirdrn','(jkfFS$343$_\=\,.F@3'); >useydb switchedtodbydb ==========================扩展知识==========================节点角色 MongoDB读写分离MongoDB副本集对读写分离的支持是通过Read Preferences特性进行支持的,这个特性非常复杂和灵活。设置读写分离需要先在从节点SECONDARY设置setSlaveOk。应用程序驱动通过read reference来设定如何对副本集进行读取操作,默认的,客户端驱动所有的读操作都是直接访问primary节点的,从而保证了数据的严格一致性。有如下几种模式: mongo shell中复制相关方法 复制数据库的命令 用户管理和认证方法官方详细档:https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell 角色管理方法官方详细档:https://docs.mongodb.com/master/reference/security/#security-methods-in-the-mongo-shell