工作中碰到一个问题,需要把某个 collection 中的某些符合条件的数据取出来,逐行处理其中某些字段。mongodb 终端下支持直接写 js 代码、函数,也可以运行 js 文件。
1 首先需要设置 mongo 终端的代码编辑器,不设置的话只能输入一行代码文件,无法处理大段 js 逻辑
  进入 mongo 终端后,输入

f={}

  回车后,继续输入:

edit f

  未设置过相关系统变量的会收到如下提示:

please define EDITOR as a JavaScript string or as an environment variable

  我们可以输入以下语句,设置 EDITOR:

EDITOR="/usr/bin/vim"

  这样就临时设置了 vim 编辑器作为后续的 js 代码编辑器。此为临时方法,关闭mongo 后再次使用就必须再次设置。可以试着将 EDITOR="/usr/bin/vim" 加入到系统环境变量中,我暂时没尝试。。。

2 写 js 代码:设置好编辑器后,终端输入:

tempFunc = {}

  回车后继续输入:

edit tempFunc

  就会进入到刚刚设置的编辑器环境,我这里是 vim 环境。注意:vim 中输入的所有内容,会被替换成 “tempFunc = “ 中等号的右部分。所以如果不是只想编辑一行代码的话,最好是在 vim 中编辑成一个函数,确保替换后会变成 tempFunc = function(){…} 的形式。我在 vim 中编辑的完整内容如下:

  注意:

    一定要仔细检查语法,如果不小心打错了字,调用时候是没有效果的,也没有办法再次编辑,只能从头再编辑一遍!!!

  编辑好以后 wq 退出 vim,到此我们就完整定义了一个 tempFunc 函数。

  在终端中输入函数调用:
    tempFunc()

  mongo 会把 entities 表中所有 grade<2 的数据取出来,然后对 grade +1,再写回数据库。

  

 注:

  1:这里 update语句 写的有一个问题:原来的 grade 如果是 int32 类型,写入后会变成 double 类型。包括使用 inc、dec 之类的操作,都会把 int32 类型的数据覆写成 double 类型。用 NumberInt 函数就可以解决
  可以把 update 语句改成这样:
    db.entities.update({_id:rowData["_id"]}, {$set:{grade:NumberInt(newGrade)}}, {multi:false});

  2:尽量定义成一个函数体,方便外界整体调用。如果不想定义成一个函数,可以一开始的时候直接 输入 edit{}, 然后再 vim 中删掉默认保留的{},就可以写一行行的 js 代码了,最后退出 vim 的时候会压缩成一行代码,类似于这种,然后按回车就直接执行了:

var cursor = db.entities.find(); while(cursor.hasNext()){ var row = cursor.next(); print(row["grade"]); }

在 mongodb 终端环境下写多行 javascript 代码、函数的更多相关文章

  1. 使用Tmux提高linux终端环境下的效率

    最近转移到linux下开发,同事告诉我一个工具tmux.关于tmux的工具的使用参考以下文章 如何使用Tmux提高终端环境下的效率 tmux的使用和快捷键 tmux简明教程 tmux使用大全

  2. 只有20行Javascript代码!手把手教你写一个页面模板引擎

    http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...

  3. spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)

    不多说,直接上干货! 前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...

  4. jdk1.8源码包下载并导入到开发环境下助推高质量代码(Eclipse、MyEclipse和Scala IDEA for Eclipse皆适用)(图文详解)

    不多说,直接上干货! jdk1.8 源码, Linux的同学可以用的上. 由于源码JDK是前版本的超集, 所以1.4, 1.5, 1.6, 1.7都可以用的上.     其实大家安装的jdk路径下,这 ...

  5. 教你看懂网上流传的60行JavaScript代码俄罗斯方块游戏

    早就听说网上有人仅仅用60行JavaScript代码写出了一个俄罗斯方块游戏,最近看了看,今天在这篇文章里面我把我做的分析整理一下(主要是以注释的形式). 我用C写一个功能基本齐全的俄罗斯方块的话,大 ...

  6. 60行JavaScript代码俄罗斯方块

    教你看懂网上流传的60行JavaScript代码俄罗斯方块游戏   早就听说网上有人仅仅用60行JavaScript代码写出了一个俄罗斯方块游戏,最近看了看,今天在这篇文章里面我把我做的分析整理一下( ...

  7. 9 行 javascript 代码获取 QQ 群成员

    昨天看到一条微博:「22 行 JavaScript 代码实现 QQ 群成员提取器」. 本着好奇心点击进去,发现没有达到效果,一是 QQ 版本升级了,二是博客里面的代码也有些繁琐. 于是自己试着写了一个 ...

  8. 65行 JavaScript 代码实现 Flappy Bird 游戏

    飞扬的小鸟(Flappy Bird)无疑是2014年全世界最受关注的一款游戏.这款游戏是一位来自越南河内的独立游戏开发者阮哈东开发,形式简易但难度极高的休闲游戏,很容易让人上瘾. 这里给大家分享一篇这 ...

  9. 只要200行JavaScript代码,就能把特斯拉汽车带到您身边

    Jerry的前一篇文章 如何使用JavaScript开发AR(增强现实)移动应用 (一) 介绍了用React-Native + ViroReact开发增强现实应用的一些预备知识. 本文咱们开始进入增强 ...

随机推荐

  1. git贡献代码流程

    1.本地创建ssh key: $ ssh-keygen -t rsa -C "your_email@youremail.com" 2.回到github,进入Account Sett ...

  2. frame和iframe的区别

    转自:http://blog.csdn.net/lyr1985/article/details/6067026        CSDN 1.frame不能脱离frameSet单独使用,iframe可以 ...

  3. svn不能提交 svn: is out of date; try updating

    今天做项目合并的时候突然不能提交了,开始以为是和服务器的有修改冲突,然后更新一下发现还是不能提交,每次都报is out of date;还原文件 -> 修改 -> 提交 -> 仍然报 ...

  4. Linux下运行top命令显示的PR\NI\RES\SHR\S\%MEM TIME+都代表什么

    PID 进程号 USER 用户名 PR 优先级 NI nice值.负值表示高优先级,正值表示低优先级 RES 进程使用的.未被换出的物理内存大小,单位Kb S 进程状态: D 不可中断的睡眠状态 R ...

  5. mybatis动态sql中的trim标签的使用(转)

    trim标记是一个格式化的标记,可以完成set或者是where标记的功能,如下代码: 1. select * from user <trim prefix="WHERE" p ...

  6. C# 程序开始主要是写类和方法 的基本步骤和调用方法

    主程序的使用方式以及调用方法字段.属性.方法 using System; using System.Collections.Generic; using System.Linq; using Syst ...

  7. static in C/C++

    最近经常碰到static,之前也使用过,但都是一知半解,所以下决心做个整理总结,搞搞灵清它到底用哪些作用. 一.static in C 1.默认初始化为0: 如果不显式地对静态变量进行初始化,它们将被 ...

  8. PHPStorm配置支持友好的Laravel代码自动提示

    在项目的composer.json "barryvdh/laravel-ide-helper":"dev-master" 项目config/app.php Ba ...

  9. wpf 动画 2个窗体切换

    <Window x:Class="翻转.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xam ...

  10. Redis客户端之Spring整合Jedis

      1.下载相关jar包,并引入工程: jedis-2.4.2.jar commons-pool2-2.0.jar 2.将以下XML配置引入spring <bean id="shard ...