您的位置:首页 > 数据库 > Mongodb

Mongodb的一些小技巧

2015-06-17 19:08 495 查看
**

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

**
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: