分类目录归档:MongoDB

2011年开始学习使用

为MongoDB编写Js维护脚本

最近项目上有一个需求,要对存储在MongoDB中的用户行为数据定期进行统计分析。 先使用PHP实现原型,发现因为数据量很大,大量时间都花在MongoDB服务器和Web服务器之间的数据交换上。考虑到这一点,必须在MongoDB服务器上进行本地计算,将结果保存起来,再使用PHP访问并展示给用户。 查阅文档得知,MongoDB可以执行JS脚本,这样思路就清楚了,用JS脚本实现统计的功能,再用crontab定期执行。 现在和大家分享一下在完成这个任务的过程中,遇到的一些问题和解决思路。(必须要说的是,MongoDB的官方文档对服务器端JS编程的文档极度缺乏,很多命令都是通过Google才找到的。) 在命令行输出信息 输出字符串: print( ‘Hello World’ ); 输出对象: var obj = { ‘key’ : ‘value’ }; printjson( obj ); 切换数据库 在Mongo JS Shell中,切换当前数据库的命令是:use xxx,这是一个magic helper。遗憾的是,在JS脚本中没有use可用。 如果运行mongo时没有加上–nodb参数,那么会自动connect到指定的服务器和数据库,并把句柄保存为db。如果运行时没有指定服务器会默认连接本机127.0.0.1,如果没有指定数据库会连接到test数据库。 你可以用conncet命令重新发起连接: var userDB = connect( ’123.123.123.123/user’ ); userDB.user.find();

发表在 IT技术, Javascript, MongoDB | 4 条评论

在MongoDB的shell中显示服务器当前IP

不久前发生一起严重的事故,误删了生产MongoDB服务器上的一个collection,由于没有定时备份,导致几天的数据丢失。认真反省之后,写下这篇文章,希望能给大家一些警示。 过程 当时我正双开两个终端窗口,分别用mongo连接开发环境和生产环境的MongoDB。由于本地的数据库因为不断的开发测试已经被污染了,我从生产环境dump了最新的数据并下载到本地。接下来要做的是把本地MongoDB中的对应collection给drop掉,然后restore回去。 这时我不知道被什么事情打断了,当我继续这个过程时,由于Mongo Shell中没有像Redis那样显示服务器的IP,我并没有注意到自己点开的是生产服务器的终端,并执行了drop命令…… 反省 1、在对生产数据库做删除之类的危险操作时,一定要两个人double check; 2、明确区分生产环境和开发环境,在执行各种删除操作前对所在的环境进行确认; 3、在执行重要操作时,不接受其他事务的打断; 措施 在生产环境和开发环境都建立一个~/.mongorc.js文件,内容如下: var prompt = function ( ) { var host = db.getMongo().toString().replace( ‘connection to ‘, ” ); var database = db.getName(); return host + ‘/’ + database + ‘> … 继续阅读

发表在 IT技术, MongoDB | 5 条评论