在 mongodb 终端环境下写多行 javascript 代码、函数
工作中碰到一个问题,需要把某个 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 代码、函数的更多相关文章
- 使用Tmux提高linux终端环境下的效率
最近转移到linux下开发,同事告诉我一个工具tmux.关于tmux的工具的使用参考以下文章 如何使用Tmux提高终端环境下的效率 tmux的使用和快捷键 tmux简明教程 tmux使用大全
- 只有20行Javascript代码!手把手教你写一个页面模板引擎
http://www.toobug.net/article/how_to_design_front_end_template_engine.html http://barretlee.com/webs ...
- spark最新源码下载并导入到开发环境下助推高质量代码(Scala IDEA for Eclipse和IntelliJ IDEA皆适用)(以spark2.2.0源码包为例)(图文详解)
不多说,直接上干货! 前言 其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. ...
- jdk1.8源码包下载并导入到开发环境下助推高质量代码(Eclipse、MyEclipse和Scala IDEA for Eclipse皆适用)(图文详解)
不多说,直接上干货! jdk1.8 源码, Linux的同学可以用的上. 由于源码JDK是前版本的超集, 所以1.4, 1.5, 1.6, 1.7都可以用的上. 其实大家安装的jdk路径下,这 ...
- 教你看懂网上流传的60行JavaScript代码俄罗斯方块游戏
早就听说网上有人仅仅用60行JavaScript代码写出了一个俄罗斯方块游戏,最近看了看,今天在这篇文章里面我把我做的分析整理一下(主要是以注释的形式). 我用C写一个功能基本齐全的俄罗斯方块的话,大 ...
- 60行JavaScript代码俄罗斯方块
教你看懂网上流传的60行JavaScript代码俄罗斯方块游戏 早就听说网上有人仅仅用60行JavaScript代码写出了一个俄罗斯方块游戏,最近看了看,今天在这篇文章里面我把我做的分析整理一下( ...
- 9 行 javascript 代码获取 QQ 群成员
昨天看到一条微博:「22 行 JavaScript 代码实现 QQ 群成员提取器」. 本着好奇心点击进去,发现没有达到效果,一是 QQ 版本升级了,二是博客里面的代码也有些繁琐. 于是自己试着写了一个 ...
- 65行 JavaScript 代码实现 Flappy Bird 游戏
飞扬的小鸟(Flappy Bird)无疑是2014年全世界最受关注的一款游戏.这款游戏是一位来自越南河内的独立游戏开发者阮哈东开发,形式简易但难度极高的休闲游戏,很容易让人上瘾. 这里给大家分享一篇这 ...
- 只要200行JavaScript代码,就能把特斯拉汽车带到您身边
Jerry的前一篇文章 如何使用JavaScript开发AR(增强现实)移动应用 (一) 介绍了用React-Native + ViroReact开发增强现实应用的一些预备知识. 本文咱们开始进入增强 ...
随机推荐
- JAVA语法细节(1)
1.变量的作用域 变量的作用域从变量定义的位置开始,到变量所在的那对大括号结束.变量定义内存开辟一块空间用于该变量,变量到达作用域时,该变量从内存中消失. 2.变量的数据类型 变量基本数据类型:byt ...
- leetcode 1
题目: 最开始采用暴力解法,两个for循环遍历所有组合形式,时间复杂度为O(n2),代码省略. 进一步学习,采用hash表存储,空间换时间,时间复杂度为O(n),空间复杂度为O(n); 将数组放入ha ...
- HTML 5缓存机制:Cache Manifest配置实例
Cache Manifest是HTML 5的一种缓存机制,文章作者直接用博客当测试环境,虽然[color=#444444 !important]应用起来非常简单,但效果却出奇的好.缓存后的速度,简直是 ...
- jquery中选择ID以什么字符开头的匹配主要用于多个上传控件的时候,id无法使用,而且class不起作用的时候
$("[id^=remark]")选择ID以remark开头的所有数据进行匹配
- linux下多ISP的策略路由
http://kerry.blog.51cto.com/172631/385578/ 修改/etc/iproute2/rt_tables 先在 /etc/iproute2/rt_tables 下建兩個 ...
- silverlight 退出系统(关闭当前网页),通过调用JS
确认后直接退出系统,关闭当前页面 页面部分: <HyperlinkButton x:Name="LinkExit" Style="{StaticResource L ...
- TFS build dotCover StyleCop
FS2010 – Customizing the Build Details View – Summary View http://blogs.msdn.com/b/jpricket/archive/ ...
- 浅谈DEs,AES
1. AES加密,相对比较简单,之前已经配置好工具类. package com.bbguoxue.poetry.util; import java.security.SecureRandom; imp ...
- 自定义获取html元素对象的7种方法。
- Linux平台下:块设备、裸设备、ASMlib、Udev相关关系
对磁盘设备(裸分区)的访问方式分为两种:1.字符方式访问(裸设备):2.块方式访问 Solaris平台 : 在Solaris平台下,系统同时提供对磁盘设备的字符.块方式访问.每个磁盘有两个设备文件名: ...