Mongodb的一些小技巧
2015-06-17 19:08
495 查看
**
我们知道在Mongodb中findOne是有格式化输出的,而find没有,但是通过一些设置或者操作,我们也可以让find来实现格式化输出。
最简单的例子是在每次find后加上pretty()
或者也在在Mongodb的shell中设置
DBQuery.prototype._prettyShell = true
那么在本shell中的所有find都是有格式的。
一劳永逸的方法就是把这条命令写入到~/.mongorc.js
**
每次在启动Mongo的客户端的时候,都会加载~/.mongorc.js文件,所以有些常用的函数或者设置可以写到这个文件中。
除了上文说到的
DBQuery.prototype._prettyShell = true
设置外还有
EDITOR=”/usr/bin/vim”
或者
EDITOR=”/usr/bin/emacs”
因为Mongo的shell中不可以编辑之前的行,为了方便的调用编辑器,可以再shell中设置EDITOR变量。
举个栗子:
另外我在我的Mongo shell中增加了时间显示和数据库标示:
18:48:43 test>
test为当前连接的db名字
做法就是在文件中增加两个函数
如果不想加载这个文件,可以用–norc启动即可
**
参考网址
1.可以通过发送kill -SIGUSR1 来分割日志
立即生效
例如:
2.mongo logRotate 命令方法
use admin
db.runCommand( { logRotate : 1 } )
需要在mongos,mongod,config server运行。
效果一样。
3.友情提醒:
如果你手动mv或者rm掉mongodb的log,让程序找不到日志文件了,哪怕再恢复一个原来文件名的文件,日志不会再写入了。这时候只能重启mongod服务了。
但是,如果你用>mongodb.log命令来清空日志文件,就不会出现这样的问题。
**
1.格式化find的结果
**我们知道在Mongodb中findOne是有格式化输出的,而find没有,但是通过一些设置或者操作,我们也可以让find来实现格式化输出。
最简单的例子是在每次find后加上pretty()
db.blog.find({"_id" : ObjectId("55814703e6c873d825fdcc1a")}) { "_id" : ObjectId("55814703e6c873d825fdcc1a"), "content" : "...", "conments" : [ { "author" : "joe", "score" : 3, "comment" : "nice post" }, { "author" : "joe", "score" : 6, "comment" : "terrible post" } ] } > > >#加了pretty()之后就有格式化输出了 > db.blog.find({"_id" : ObjectId("55814703e6c873d825fdcc1a")}).pretty() { "_id" : ObjectId("55814703e6c873d825fdcc1a"), "content" : "...", "conments" : [ { "author" : "joe", "score" : 3, "comment" : "nice post" }, { "author" : "joe", "score" : 6, "comment" : "terrible post" } ] }
或者也在在Mongodb的shell中设置
DBQuery.prototype._prettyShell = true
那么在本shell中的所有find都是有格式的。
一劳永逸的方法就是把这条命令写入到~/.mongorc.js
**
2. .mongorc.js的一些设置
**每次在启动Mongo的客户端的时候,都会加载~/.mongorc.js文件,所以有些常用的函数或者设置可以写到这个文件中。
除了上文说到的
DBQuery.prototype._prettyShell = true
设置外还有
EDITOR=”/usr/bin/vim”
或者
EDITOR=”/usr/bin/emacs”
因为Mongo的shell中不可以编辑之前的行,为了方便的调用编辑器,可以再shell中设置EDITOR变量。
举个栗子:
> var t = 123; > print(t) 123 > #如果在这里发现t变量有错,那么可以再次编辑 > edit t > #输入edit t后,会打开vim并写显示t的值,编辑完成后,保存退出,变量自动保存 > print(t) 234
另外我在我的Mongo shell中增加了时间显示和数据库标示:
18:48:43 test>
test为当前连接的db名字
做法就是在文件中增加两个函数
prompt=function(){ var d = new Date(); var t = enrichTime(d.getHours()) + ":" + enrichTime(d.getMinutes()) + ":" + enrichTime(d.getSeconds()); if (typeof db == 'undefined') { return t + " (nodb)> "; } try { db.runCommand({getLastError:1}); } catch (e) { print(e) } return t + " " + db + "> "; }; #避免出现18:2:2 这样的情况 function enrichTime(i) { if (i<10) { i = "0" + i; } return i; }
如果不想加载这个文件,可以用–norc启动即可
./bin/mongo --norc
**
3.日志分割
**参考网址
1.可以通过发送kill -SIGUSR1 来分割日志
立即生效
例如:
[19:01:30 fifi@CentOS6 log]$ ps xf PID TTY STAT TIME COMMAND 1345 ? S 0:03 sshd: fifi@pts/0,pts/1 1346 pts/0 Ss 0:00 \_ -bash 1816 pts/0 Sl+ 0:00 | \_ ./bin/mongo 1678 pts/1 Ss 0:00 \_ -bash 1851 pts/1 R+ 0:00 \_ ps xf 1505 ? Rl 1:15 ./bin/mongod -f mongodb.conf [19:01:31 fifi@CentOS6 log]$ ll total 8 -rw-rw-r--. 1 fifi fifi 822 Jun 17 19:01 mongo.log [19:01:36 fifi@CentOS6 log]$ pwd /home/fifi/Mongodb/log [19:01:38 fifi@CentOS6 log]$ kill -SIGUSR1 1505 [19:01:42 fifi@CentOS6 log]$ ll total 12 -rw-rw-r--. 1 fifi fifi 822 Jun 17 19:01 mongo.log -rw-rw-r--. 1 fifi fifi 822 Jun 17 19:01 mongo.log.2015-06-17T11-01-42
2.mongo logRotate 命令方法
use admin
db.runCommand( { logRotate : 1 } )
需要在mongos,mongod,config server运行。
效果一样。
3.友情提醒:
如果你手动mv或者rm掉mongodb的log,让程序找不到日志文件了,哪怕再恢复一个原来文件名的文件,日志不会再写入了。这时候只能重启mongod服务了。
但是,如果你用>mongodb.log命令来清空日志文件,就不会出现这样的问题。
**
4.其他技巧以后再补充
**相关文章推荐
- Mongodb内嵌文档的查询
- MongoDB 学习笔记(python操作)
- ThinkPHP3.2对MongoDB的基本操作
- php操作MongoDB类实例
- mongodb mysql对比
- MongoDB 的 GridFS 详细分析
- MongoDB 的 GridFS 详细分析
- MongoDb的bin目录下文件mongod,mongo,mongostat命令的说明及使用
- MongoDb的bin目录下文件mongod,mongo,mongostat命令的说明及使用
- MongoDB副本集配置系列六:定位MongoDB慢的原因
- MongoDB副本集配置系列五:副本集的在线迁移
- mongodb进行java调用方法
- NOSQL Mongo入门学习笔记 - C++连接Mongodb(三)
- php操作MongoDB类实例
- MongoDB获得短暂的
- MongoDB实战开发
- [mongoDB] error 10061由于目标服务器积极拒绝,无法连接
- [mongoDB] error 10061由于目标服务器积极拒绝,无法连接
- mongodb集群问题记录
- MongoDB学习笔记(查询)【转】