在shell 上执行mongo 查询
需求
在写小工具的时候,经常遇到需要从mongodb 里面查东西来用,因为要跟其他bash 工具链结合在一起用,所以最理想的方法是能够在shell 上执行查询,然后pipe 给接下来的工具做处理。
方案
幸运的是对于mongo 来说做起来是很方便的,只需要使用mongo --eval 即可。例1:
mongo 192.168.1.2:/mybase --eval 'printjson(db.tasks.findOne())'
这段脚本首先链接上地址为192.168.1.2:27060 的mongodb 服务器,然后在mybase 数据库下执行后面引号内的javascript,这段javascript 和mongoshell 里的并没有区别。值得注意的是这里是用的mongoshell 的一个全局函数 printjson 用来把查询结果转换成json 打印出来。
例2:
mongo 192.168.1.2:/mybase --eval 'db.tasks.find({type:"danger"}).forEach(printjson)'
在查询结果不唯一的时候,即不像例1那样使用findOne 返回单一结果,而是返回一个“结果集” 的时候,mongo 实际上返回的是一个可遍历的cursor,这时候如果你用printjson 把查询语句包起来printjson(db.find()...) 的话,实际打印出的是cursor 的内容。正确的做法是forEach 遍历cursor 然后打印每一项。
例3:
mongo 192.168.1.2:/mybase --eval 'db.tasks.find({type:"danger"}).forEach(function(e){print(e._id.str)})'
找出所有属性为“danger” 的task 的id,这里使用ObjectID的str 属性来把他转换成字符串。
总结
注意返回内容,一般是一个可遍历的cursor。
参考:
http://stackoverflow.com/questions/4837673/how-to-execute-mongo-commands-through-shell-scripts
在shell 上执行mongo 查询的更多相关文章
- Microsoft Dynamics CRM 2011 当您在 大型数据集上执行 RetrieveMultiple 查询很慢的解决方法
症状 当您在 Microsoft Dynamics CRM 2011 年大型数据集上执行 RetrieveMultiple 查询时,您会比较慢. 原因 发生此问题是因为大型数据集缓存 Retrieve ...
- shell 中执行Oracle查询和执行存储过程
[oracle@master2 test]$ more b.sh #!/bin/sh #数据库地址 ip=192.168.1.250 port sid=orcl username=c##scott p ...
- python使用rdflib创建rdf,在jena fuseki上执行SPARQL查询
建立并启动jena fuseki服务 参考:https://www.cnblogs.com/bincoding/p/11223372.html 使用rdflib创建rdf文件 import rdfli ...
- EntityFramework Core 2.0执行原始查询如何防止SQL注入?
前言 接下来一段时间我们来讲讲EntityFramework Core基础,精简的内容,深入浅出,希望为想学习EntityFramework Core的童鞋提供一点帮助. EntityFramewor ...
- [shell]上一个命令执行完成,才执行下一个操作 | shell脚本中判断上一个命令是否执行成功
shell脚本中判断上一个命令是否执行成功 shell中使用符号“$?”来显示上一条命令执行的返回值,如果为0则代表执行成功,其他表示失败.结合if-else语句实现判断上一个命令是否执行成功. 场 ...
- 在 Jenkins Windows Agent 节点上执行 Shell 命令
Jenkins 在 Windows agent 上执行shell 命令,听起来很有意思,以下方法可以在 Jenkins 中执行一些简单的 shell 脚本,如果是复杂脚本就交给 Linux agent ...
- 在远程服务器上执行本地的shell脚本
在远程服务器上执行本地的shell脚本 [root@localhost zzx]# sh echoip.sh 192.168.67.131[root@localhost zzx]# ssh root@ ...
- 【Shell实战】批量在多台服务器上执行命令
功能说明:批量在多台服务器上执行命令 #!/bin/bash # ========================================== # 功能:批量在多台服务器上执行命令 # 方法: ...
- Centos上执行Shell的四种方式
注意:我这里说的shell脚本是Bash Shell,其他类型的shell脚本不保证有效 1,方式一:进入shell文件所在目录 ./my.sh执行 ./my.sh ./的意思是说在当前的工作目录下执 ...
随机推荐
- windows下编译chromium浏览器的15个流程整理
编译chromium 系统为windows, 国内在windows上编译chromium的资料比较少, 我这篇文章只能作为参考, 记录我遇到的一些问题,因为chromium团队也会修改了代码,或者编译 ...
- Java语法
java语法: 一个java程序可以说是一系列对象的集合,而这些对象都要通过调用彼此的方法来协同工作. 对象: 对象是一个实例,例如:一只猫,它是一个对象,有状态和行为.它的状态状态有:颜色,名字,品 ...
- Thinking in java学习笔记之迭代器
Map<String,String> map = new HashMap<String,String>(); List list = new ArrayList(); list ...
- asp.net mvc 通过T4模板生成框架
http://www.cnblogs.com/rdst/archive/2012/08/13/2637210.html http://www.kuqin.com/shuoit/20140716/341 ...
- No module named migrate.versioning
在学习mega-tutorial的数据库章节时创建数据库遇到了问题,在stackoverflow上找到了结果 pip install sqlalchemy==0.7.9 pip install sql ...
- Python学习笔记——条件和循环
1.条件表达式 >>> x = 3 >>> x = 1 if x<3 else 2 >>> x 2 2.for语句用于序列类型 <1& ...
- JS之Form表单相关操作
获取ID组件的值 var userid=document.getElementById('userid').value;var cdkey=document.getElementById('cdkey ...
- 微信"附近的人"新增商家公众号入驻功能
微信近日升级了“附近的人”,新增商家公众号(认证的服务号和有卡券功能的公众号)可自入驻,这是微信在推出卡券和微信wifi功能后,又一加强连接线下商户能力的功能. 微信在“附近的人”中 增加搜索商户功能 ...
- 【bzoj2318】Spoj4060 game with probability Problem
题目描述 Alice和Bob在玩一个游戏.有n个石子在这里,Alice和Bob轮流投掷硬币,如果正面朝上,则从n个石子中取出一个石子,否则不做任何事.取到最后一颗石子的人胜利.Alice在投掷硬币时有 ...
- 【Go入门教程7】并发(goroutine,channels,Buffered Channels,Range和Close,Select,超时,runtime goroutine)
有人把Go比作21世纪的C语言,第一是因为Go语言设计简单,第二,21世纪最重要的就是并行程序设计,而Go从语言层面就支持了并行. goroutine goroutine是Go并行设计的核心.goro ...