Mongodb的一些小技巧

来源:互联网 发布:淘宝卖家版官方下载 编辑:程序博客网 时间:2024/05/29 05:12

**

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]$ lltotal 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.其他技巧以后再补充

**

0 0