设为首页 收藏本站
查看: 1468|回复: 0

mongo Shell的使用小技巧

[复制链接]

尚未签到

发表于 2018-8-20 11:23:22 | 显示全部楼层 |阅读模式
  博文转载地址:http://blog.csdn.net/u011235983/article/details/9768179
  mongo shell是MongoDB的交互式的JavaScript shell。我们可以用它来管理操作数据库,还可以用来运行JavaScript程序。下面介绍一些mongo
  shell的使用技巧,包括修改默认的提示符、在shell中使用外部编辑器和在mongo shell中使用快捷键。
  mongo shell的提示符 在连接不同的节点时,mongo shell的提示符不一样:单节点默认的提示符是:”>”;
  复制集默认的提示符会显示复制集的名字和复制集的状态,比如:“replsetname:PRIMARY>”;
  路由mongos默认的提示符是:”mongos>”
  我们可以通过设置prompt变量来自定义提示符。在mongo shell中运行下面的代码就可以在mongo shell的提示符中显示数据库的名字和机器名:
  

[javascript] view plain copy  
var host = db.serverStatus().host;
  
var prompt = function() { return db+"@"+host+"> "; }
  

  假设当前连接的是test数据库,提示符显示的是”local@hostname”,在切换数据库到local数据库后,显示就变成“local@hostname”了。
  

[javascript] view plain copy  
test@hostname> use local
  
switched to db local
  
local@hostname>
  

  如果我们需要在连接复制集时,既显示复制集的状态,又显示当前连接的数据库,可以使用下面的设置:(这个设置在连接主节点时,显示的是主节点所在的机器名)
  

[javascript] view plain copy  
var host = db.serverStatus().host;
  
states = ["STARTUP", "PRIMARY", "SECONDARY", "RECOVERING", "FATAL",
  "STARTUP2", "UNKNOWN", "ARBITER", "DOWN", "ROLLBACK"];
  
var prompt = function() {
  result = db.isMaster();
  if (result.ismaster) {
  return db+"@"+host+"> ";
  }
  result = db.adminCommand({replSetGetStatus : 1})
  return states[result.myState]+":"+db+"> ";
  
}
  

  默认的提示符在连接mongos时,会显示”mongos>”,这有助于帮助我们了解当前连接的是一个集群。通过下面的设置我们可以在连接到mongos时,既显示当前连接的是mongos,又显示当前连接的数据库名:
  

[javascript] view plain copy  
var prompt = function() {
  result = db.adminCommand({isdbgrid : 1});
  if (result.ok == 1) {
  return "mongos:"+db+"> ";
  }
  
}
  

  我们可以把上面的代码组合起来,设置成我们自定义的mongo shell的提示符:
  

[javascript] view plain copy  
var host = db.serverStatus().host;
  
states = ["STARTUP", "PRIMARY", "SECONDARY", "RECOVERING", "FATAL",
  "STARTUP2", "UNKNOWN", "ARBITER", "DOWN", "ROLLBACK"];
  
var prompt = function() {
  

  result = db.adminCommand({isdbgrid : 1});
  if (result.ok == 1) {
  return "mongos:"+db+"> ";
  }
  result = db.isMaster();
  if (result.ismaster) {
  return db+"@"+host+"> ";
  }
  result = db.adminCommand({replSetGetStatus : 1})
  return states[result.myState]+":"+db+"> ";
  
}
  

  如果我们每次在进入mongo shell以后才运行上面的代码来自定义提示符会很麻烦,我们可以通过下面两种方式来简化:
  把上面的代码存为shellConfig.js,在进入mongo shell后,运行load(“/shellConfig.js”)就可以加载自定义的Shell提示符了。我们需要把替换成shellConfig.js的路径。
  mongo在启动时会自动加载用户的home目录下的.mongorc.js文件,所以我们也可以把上面的代码存放到用户home目录下的.mongorc.js文件里。在每次启动mongo shell的时候,就会自动加载自定义的提示符。如果不需要加载自定义的提示符,我们可以在启动mongo shell时使用--norc选项。
  mongo shell中使用外部编辑器
  在前面的《MongoDB的聚合框架》的博客里,我们介绍了MongoDB的聚合操作的一个例子,如果我们在mongo
  shell里编写和调试这个聚合操作的命令,每次修改或编辑都比较困难。我们可以在运行mongo shell前设置EDITOR变量,在进入mongo shell后就能用edit命令来使用外部编辑器。
  

[javascript] view plain copy  
bash-3.2$ export EDITOR=vim
  
bash-3.2$ mongo
  
MongoDB shell version: 2.4.5
  
connecting to: test
  
Server has startup warnings:
  
Fri Aug  2 11:04:20.791 [initandlisten]
  
Fri Aug  2 11:04:20.791 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
  
test@hostname> edit match
  

  在编辑match变量时,我们可以用vim来编辑代码:
  

[javascript] view plain copy  
{
  "$match" : {
  "posted" : {
  "$gte" : ISODate("2012-07-01T00:00:00Z")
  }
  }
  
}
  

  保存match变量并退出当前编辑器后,就能直接使用这个match变量了:
  

[javascript] view plain copy  
test@hostname> db.articles.aggregate([ match ])
  

  同理编辑unwind, group, sort, skip, limit, project这些变量,就可以运行例子里完整的聚合操作的命令:
  

[javascript] view plain copy  
test@hostname> db.articles.aggregate([ match, unwind, group, sort, skip, limit, project])
  
{
  "result" : [
  {
  "total" : 182,
  "tags" : "Solaris"
  },
  {
  "total" : 198,
  "tags" : "MongoDB"
  }
  ],
  "ok" : 1
  
}
  

  如果我们想要把查询的时间从2012年7月1号改成2012年8月1号,我们只需要修改match变量,就可以再次运行这个聚合操作:
  

[javascript] view plain copy  
test@hostname> edit match
  

  
改为:
  
[javascript] view plain copy
  
{
  "$match" : {
  "posted" : {
  "$gte" : ISODate("2012-08-01T00:00:00Z")
  }
  }
  
}
  

[javascript] view plain copy  
test@hostname> db.articles.aggregate([ match, unwind, group, sort, skip, limit, project])
  
{
  "result" : [
  {
  "total" : 162,
  "tags" : "Solaris"
  },
  {
  "total" : 162,
  "tags" : "MongoDB"
  }
  ],
  "ok" : 1
  
}
  

  mongo shell的快捷键:
  在mongo shell里,我们可以使用Tab键来自动补充命令,比如我们敲了”db.”的命令后,用Tab键就可以提示所有以”db.”开头的命令:
  

[javascript] view plain copy  
test@hostname> db.
  
db.Achievement                 db.forceError(                 db.groupeval(                  db.runCommand(
  
db.addUser(                    db.fsyncLock(                  db.hasOwnProperty(             db.serverBits(
  
db.adminCommand(               db.fsyncUnlock(                db.help(                       db.serverBuildInfo(
  
db.articles                    db.getCollection(              db.hostInfo(                   db.serverCmdLineOpts(
  
db.auth(                       db.getCollectionNames(         db.isMaster(                   db.serverStatus(
  
db.changeUserPassword(         db.getLastError(               db.killOP(                     db.setProfilingLevel(
  
db.cloneCollection(            db.getLastErrorCmd(            db.killOp(                     db.setSlaveOk(
  
db.cloneDatabase(              db.getLastErrorObj(            db.listCommands(               db.shutdownServer(
  
db.commandHelp(                db.getMongo(                   db.loadServerScripts(          db.stats(
  
db.constructor                 db.getName(                    db.logout(                     db.system.indexes
  
db.copyDatabase(               db.getPrevError(               db.printCollectionStats(       db.system.profile
  
db.createCollection(           db.getProfilingLevel(          db.printReplicationInfo(       db.toLocaleString(
  
db.currentOP(                  db.getProfilingStatus(         db.printShardingStatus(        db.toString(
  
db.currentOp(                  db.getReplicationInfo(         db.printSlaveReplicationInfo(  db.tojson(
  
db.dbEval(                     db.getSiblingDB(               db.propertyIsEnumerable(       db.user
  
db.docs                        db.getSisterDB(                db.prototype                   db.userResult
  
db.dropDatabase(               db.getSlaveOk(                 db.removeUser(                 db.valueOf(
  
db.eval(                       db.group(                      db.repairDatabase(             db.version(
  
db.foo                         db.groupcmd(                   db.resetError(
  

  此外,我们还可以用Ctrl+L或者cls命令来清屏,类似于Unix/Linux里的clear命令。更多的快捷键可以参考MongoDB的文档:http://docs.mongodb.org/manual/reference/program/mongo/#keyboard-shortcuts
  参考文档:
  http://docs.mongodb.org/manual/tutorial/getting-started-with-the-mongo-shell/
  http://docs.mongodb.org/manual/faq/mongo/#faq-the-mongo-shell
  http://www.kchodorow.com/blog/2011/06/27/ps1/



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-554230-1-1.html 上篇帖子: [linux shell]if -else 例子 下篇帖子: linux学习—shell脚本知识点总结
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表