因为项目对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
mongodb shell指令,在后台shell进行数据操作!
大作业速看 mongodb shell 最全命令
Mongodb备份数据库的shell脚本文件, 经过在实际项目中测试使用过.
MongoDB Community Server(mongodb-org-shell-5.0.4-1.suse12.x86_64.rpm)适用于SUSE12 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...
主要介绍了MongoDB Shell 命令,结合实例形式总结分析了MongoDB数据库常用的查询、更新、插入、集合、函数等相关操作技巧与注意事项,需要的朋友可以参考下
MongoDB Community Server(mongodb-shell-linux-x86_64-rhel70-5.0.4.tgz)适用于RedHat / CentOS 7.0 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案...
实现mongodb自定义备份,可实现自定义库、自定义集合、自定义备份周期,使用方便,脚本易维护!
MongoDB Community Server(mongodb-shell-linux-x86_64-suse12-5.0.4.tgz)适用于SUSE12 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...
MongoDB Community Server(mongodb-shell-linux-x86_64-suse15-5.0.4.tgz)适用于SUSE15 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-org-shell_5.0.4_amd64.deb)适用于适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一...
MongoDB Community Server(mongodb-org-shell-5.0.4-1.el7.x86_64.rpm)适用于RedHat / CentOS 7.0 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 ...
一个nodejs util连接并发送命令到mongodb shell 用于 用法 npm install mongodb-shell const { MongoShell } = require ( 'mongodb-shell' ) ; const mongoShell = new MongoShell ( 'localhost:27017' ) ; const ...
MongoDB Community Server(mongodb-org-shell-5.0.4-1.suse15.x86_64.rpm)适用于SUSE15 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...
通常,你可以使用 MongoDB Shell 或 MongoDB 驱动程序(如 Python 的 pymongo)来连接 MongoDB 数据库。 使用 MongoDB Shell 的命令: bash mongo 或连接到特定的数据库和主机: bash mongo --host localhost --...
MongoDB Community Server(mongodb-shell-linux-x86_64-debian10-5.0.4.tgz)适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 ...
mongo-hacker:针对黑客的MongoDB Shell增强功能-源码
注入 NodeJS 的 MongoDB shell - 在同一环境中使用require()和同步db.test.find() 注意:此代码仅适用于带有--harmony和--harmony_proxies标志的Node ~0.12 。 该项目预计不会在节点 0.10.x、0.11.x 或 io.js 上...