`
marlonyao
  • 浏览: 252720 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

扩充mongodb shell

阅读更多
因为项目对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

    标题中的“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

    windows版本 mongodb shell:mongosh-2.2.6-win32-x64.zip mongodb shell :https://www.mongodb.com/try/download/shell mongodb相关官网下载地址: mongodb社区版:...

    mongodb shell指令

    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 shell-2.2.10-win32-x64安装包

    MongoDB Shell命令.pdf

    MongoDB的一个独特之处在于它不使用传统的SQL语句,而是通过MongoDB Shell来执行各种操作,因此掌握其Shell命令对于使用MongoDB进行开发和维护至关重要。 在MongoDB中,基本的数据单位是文档,文档中的数据是以键值...

    mongoshell 安装包

    6.0 版本以上的mongodb不提供,shell脚本需要自己安装使用

    dump-mongodb.sh(备份MongoDB数据库shell)

    Mongodb备份数据库的shell脚本文件, 经过在实际项目中测试使用过.

    MongoDB Shell 下载 版本:2.3.3 Windows x64

    MongoDB Shell 下载 版本:2.3.3 Windows x64

    MongoDB(mongodb-org-shell-5.0.4-1.suse12.x86_64.rpm)

    MongoDB Community Server(mongodb-org-shell-5.0.4-1.suse12.x86_64.rpm)适用于SUSE12 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...

    MongoDB(mongodb-shell-linux-x86_64-debian10-5.0.4.tgz)

    MongoDB Community Server(mongodb-shell-linux-x86_64-debian10-5.0.4.tgz)适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 ...

    MongoDB(mongodb-shell-linux-x86_64-rhel70-5.0.4.tgz)

    MongoDB Community Server(mongodb-shell-linux-x86_64-rhel70-5.0.4.tgz)适用于RedHat / CentOS 7.0 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案...

    shell实现自动备份mongodb

    实现mongodb自定义备份,可实现自定义库、自定义集合、自定义备份周期,使用方便,脚本易维护!

    MongoDB客户端访问(Shell方式 ) .pdf

    MongoDB 提供了一个内置的JavaScript Shell,这使得用户可以通过命令行进行交互式操作和管理数据库。以下是对MongoDB Shell的一些关键知识点的详细说明: 1. **启动MongoDB Shell**: MongoDB Shell 是一个基于...

    MongoDB(mongodb-shell-linux-x86_64-suse12-5.0.4.tgz)

    MongoDB Community Server(mongodb-shell-linux-x86_64-suse12-5.0.4.tgz)适用于SUSE12 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...

    docker-mongodb-shell:在Docker容器中安装mongo shell和工具的示例

    mongodb-org-shell ,包含mongo shell。 mongodb-org-tools ,包含以下MongoDB工具:mongoimport bsondump,mongodump,mongoexport,mongofiles,mongorestore,mongostat和mongotop。 docker build --rm -t ...

    MongoDB(mongodb-shell-linux-x86_64-suse15-5.0.4.tgz)

    MongoDB Community Server(mongodb-shell-linux-x86_64-suse15-5.0.4.tgz)适用于SUSE15 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是...

    MongoDB(mongodb-org-shell_5.0.4_amd64.deb)

    MongoDB Community Server(mongodb-org-shell_5.0.4_amd64.deb)适用于适用于Debian10 MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB是一...

    mongo-hacker:针对黑客的MongoDB Shell增强功能

    MongoDB Shell是官方提供的一款交互式JavaScript环境,用于管理MongoDB数据库。然而,对于黑客或者安全研究人员来说,标准的MongoDB Shell可能不足以满足他们进行深入分析和调试的需求。这就是`mongo-hacker`的出现...

    mongo-shell:连接到mongodb shell的nodejs util

    一个nodejs util连接并发送命令到mongodb shell 用于 用法 npm install mongodb-shell const { MongoShell } = require ( 'mongodb-shell' ) ; const mongoShell = new MongoShell ( 'localhost:27017' ) ; const ...

Global site tag (gtag.js) - Google Analytics