zoukankan      html  css  js  c++  java
  • 在shell 上执行mongo 查询

    需求

      在写小工具的时候,经常遇到需要从mongodb 里面查东西来用,因为要跟其他bash 工具链结合在一起用,所以最理想的方法是能够在shell 上执行查询,然后pipe 给接下来的工具做处理。

    方案

      幸运的是对于mongo 来说做起来是很方便的,只需要使用mongo --eval 即可。例1:

    mongo 192.168.1.2:27060/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:27060/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:27060/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

  • 相关阅读:
    JS-OO-数据属性,访问器属性
    下载php扩展笔记
    php字符串笔记
    include、require、include_once和require_once理解
    http协议笔记
    Git中三种文件状态及其转换
    git add 命令
    / 直接用就可以了 想用,需要用\来转义
    $_POST 变量以及$GLOBALS['HTTP_RAW_POST_DATA']
    Python multiprocessing
  • 原文地址:https://www.cnblogs.com/agentgamer/p/4994650.html
Copyright © 2011-2022 走看看