因为项目对mongodb数据库的结构做了一点修改,仅仅是是因为添加/删除一列就导致我使用python写了两个小程序来实现这一功能,而这样的功能在MySQL等关系数据库实际就是一条alter table命令的事。事后我就思考有没有简单的方法去实现这一点,一种方法就是用python实现类似MySQL修改数据模式的一套,这涉及到语法解析,并不简单。第二种方法就是扩展mongo shell,既然mongo shell可以运行javascript,就应当可以写javascript来扩充shell,通过mongo --help果然发现发现mongo可以直接运行javascript,并且通过加上--shell参数可以保持当javascript脚本执行完成之后并不退出shell。
要用javascript去扩展shell,首先就得知道shell使用的javascript类型,这并不困难,因为mongodb开源,这里有mongo shell的
javascript代码,从这里我们可以知道DBCollection代表一个collection,如果我们增加添加/删除列的功能,只需要为DBCollection添加相应的方法就可以了。
DBCollection.prototype.addColumn = function(name, value) {
var cond = {};
cond[name] = { $exists: false };
var field = {};
field[name] = value;
this.update(cond, { '$set': field }, false, true);
}
DBCollection.prototype.dropColumn = function(name) {
var field = {};
field[name] = 1;
this.update({}, {'$unset': field }, false, true);
}
这样,在命令行下输入"mongo --shell mongo.js",然后就可以用db.account.addColumn("is_active", true)来为account collection添加is_active列了。我们也可以将新的方法加入到db.foo.help()中去,免得日后忘记:
_original_help = DBCollection.prototype.help;
DBCollection.prototype.help = function() {
_original_help.apply(this);
var shortName = this.getName();
print("\tdb." + shortName + ".addColumn(name[, value]) - add column if it doesn't exist");
print("\tdb." + shortName + ".dropColumn(name) - remove column");
}
最后每次都要输入"mongo --shell mongo.js"也是很繁琐的事,所以将它作为mongo的alias添加到.bashrc(或者.bash_aliases,如果你也像我一样喜欢将所有alias放在一个单独的文件中)中去就显得很有必要了。
分享到:
相关推荐
标题中的“PyPI 官网下载 | mongodbshell-0.1a4.tar.gz”表明这是一个在Python Package Index(PyPI)上发布的软件包,名为`mongodbshell`,版本为0.1a4,且文件格式为tar.gz。PyPI是Python开发者发布自己编写的模块...
windows版本 mongodb shell:mongosh-2.2.6-win32-x64.zip mongodb shell :https://www.mongodb.com/try/download/shell mongodb相关官网下载地址: mongodb社区版:...
mongodb shell指令,在后台shell进行数据操作!
mongoDB shell-2.2.10-win32-x64安装包 mongoDB shell-2.2.10-win32-x64安装包 mongoDB shell-2.2.10-win32-x64安装包 mongoDB shell-2.2.10-win32-x64安装包
MongoDB的一个独特之处在于它不使用传统的SQL语句,而是通过MongoDB Shell来执行各种操作,因此掌握其Shell命令对于使用MongoDB进行开发和维护至关重要。 在MongoDB中,基本的数据单位是文档,文档中的数据是以键值...
6.0 版本以上的mongodb不提供,shell脚本需要自己安装使用
Mongodb备份数据库的shell脚本文件, 经过在实际项目中测试使用过.
MongoDB Shell 下载 版本:2.3.3 Windows x64
MongoDB Community Server(mongodb-org-shell-5.0.4-1.suse12.x86_64.rpm)适用于SUSE12 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...
MongoDB Community Server(mongodb-shell-linux-x86_64-debian10-5.0.4.tgz)适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 ...
MongoDB Community Server(mongodb-shell-linux-x86_64-rhel70-5.0.4.tgz)适用于RedHat / CentOS 7.0 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案...
实现mongodb自定义备份,可实现自定义库、自定义集合、自定义备份周期,使用方便,脚本易维护!
MongoDB 提供了一个内置的JavaScript Shell,这使得用户可以通过命令行进行交互式操作和管理数据库。以下是对MongoDB Shell的一些关键知识点的详细说明: 1. **启动MongoDB Shell**: MongoDB Shell 是一个基于...
MongoDB Community Server(mongodb-shell-linux-x86_64-suse12-5.0.4.tgz)适用于SUSE12 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...
mongodb-org-shell ,包含mongo shell。 mongodb-org-tools ,包含以下MongoDB工具:mongoimport bsondump,mongodump,mongoexport,mongofiles,mongorestore,mongostat和mongotop。 docker build --rm -t ...
MongoDB Community Server(mongodb-shell-linux-x86_64-suse15-5.0.4.tgz)适用于SUSE15 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...
MongoDB Community Server(mongodb-org-shell_5.0.4_amd64.deb)适用于适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一...
MongoDB Shell是官方提供的一款交互式JavaScript环境,用于管理MongoDB数据库。然而,对于黑客或者安全研究人员来说,标准的MongoDB Shell可能不足以满足他们进行深入分析和调试的需求。这就是`mongo-hacker`的出现...
一个nodejs util连接并发送命令到mongodb shell 用于 用法 npm install mongodb-shell const { MongoShell } = require ( 'mongodb-shell' ) ; const mongoShell = new MongoShell ( 'localhost:27017' ) ; const ...