在 mongodb 终端情形下写多行 javascript 代码、函数
工作中碰到一个问题,需要把某个 collection 中的某些符合条件的数据取出来,逐行处理其中某些字段。mongodb 终端下支持直接写 js 代码、函数,也可以运行 js 文件。 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 函数。 在终端中输入函数调用: mongo 会把 entities 表中所有 grade<2 的数据取出来,然后对 grade +1,再写回数据库。
注: 1:这里 update语句 写的有一个问题:原来的 grade 如果是 int32 类型,写入后会变成 double 类型。包括使用 inc、dec 之类的操作,都会把 int32 类型的数据覆写成 double 类型。用 NumberInt 函数就可以解决 2:尽量定义成一个函数体,方便外界整体调用。如果不想定义成一个函数,可以一开始的时候直接 输入 edit{}, 然后再 vim 中删掉默认保留的{},就可以写一行行的 js 代码了,最后退出 vim 的时候会压缩成一行代码,类似于这种,然后按回车就直接执行了: var cursor = db.entities.find(); while(cursor.hasNext()){ var row = cursor.next(); print(row["grade"]); }
(编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |