6.3 創(chuàng)建 .mongorc.js 文件
首先在windows
中此文件位于C
盤的用戶目錄中,而在Linux
中是位于/home/yj
中狗热,這里yj
是我的用戶名钞馁。如果某些腳本會(huì)被頻繁加載虑省,可以將它們添加到.mongorc.js
文件中,這個(gè)文件會(huì)在啟動(dòng)shell
時(shí)(具體來說是連接時(shí))自動(dòng)運(yùn)行僧凰。下面我們?cè)诖宋募刑砑尤缦聝?nèi)容:
// .mongorc.js
var compliment = ["attractive", "intelligent", "like Batman"];
var index = Math.floor(Math.random() * 3);
print("Hello, you're looking particulary " + compliment[index] + " today!");
然后啟動(dòng)shell
并連接:
為了實(shí)用探颈,可以使用此文件創(chuàng)建一些自己需要的全局變量,或者是為太長(zhǎng)的名字創(chuàng)建一個(gè)簡(jiǎn)短的別名训措,也可以重寫內(nèi)置的函數(shù)伪节。此文件最常見的用途還是移除那些比較“危險(xiǎn)”的shell
輔助函數(shù)。
var no = function(){
print("Not on my watch.");
};
//禁止刪除數(shù)據(jù)庫
db.dropDatabase = DB.prototype.dropDatabase = no;
//禁止刪除集合
DBCollection.prototype.drop = no;
//禁止刪除索引
DBCollection.prototype.dropIndex = no;
說明:改變數(shù)據(jù)庫函數(shù)時(shí)绩鸣,要確保同時(shí)對(duì)db
變量和DB
原型進(jìn)行改變怀大。如果在啟動(dòng)的時(shí)候執(zhí)行--norc
參數(shù),就可以禁止加載此文件呀闻。
注意:這種方式并不能保護(hù)數(shù)據(jù)庫免受惡意用戶的攻擊化借,只能預(yù)防自己的手段。
6.4 定制shell提示
將prompt
變量設(shè)為一個(gè)字符串或者函數(shù)捡多,就可以重寫默認(rèn)的shell
提示蓖康。例如,如果正在運(yùn)行一個(gè)需要耗時(shí)幾分鐘的查詢垒手,你可能希望完成時(shí)在shell
提示中輸出當(dāng)前時(shí)間钓瞭,這樣就可以知道最后一個(gè)操作的完成時(shí)間了。
prompt = function(){
return (new Date()) + ">";
};
另一個(gè)方便的提示是顯示當(dāng)前使用的數(shù)據(jù)庫:
prompt = function(){
if(typeof db == 'undefined'){
return '(nodb) > ';
}
//檢查最后的數(shù)據(jù)庫操作
try{
db.runCommand({getLastError:1});
}catch(e){
print(e);
}
return db + ">";
};
注意:提示函數(shù)應(yīng)該返回字符串淫奔,而且應(yīng)該小心謹(jǐn)慎地處理異常。通常來說堤结,提示函數(shù)中應(yīng)該包含對(duì)getLastError
的調(diào)用唆迁,這樣可以捕獲數(shù)據(jù)庫錯(cuò)誤,而且可以在shell
斷開時(shí)自動(dòng)重新連接(比如重啟)竞穷。
6.5 編輯復(fù)合變量
在shell
中多行支持是非常有限的唐责,不可以編輯之前的行。有時(shí)候發(fā)現(xiàn)之前編輯的內(nèi)容有錯(cuò)誤瘾带,但是卻不能返回去編輯是很煩人的鼠哥,為了方便地調(diào)用編輯器,可以在shell
中設(shè)置EDITOR
變量看政。
> EDITOR = "/usr/bin/vim"
現(xiàn)在如果想要編輯一個(gè)變量朴恳,可以使用"edit"
變量名這個(gè)命令,如:
> var wap = db.blog.findOne(
> edit wap
修改之后保存退出允蚣。在.mongorc.js
文件中添加一行內(nèi)容于颖,EDITOR="/usr/bin/vim";
,以后就不必單獨(dú)設(shè)置此變量了嚷兔。
6.6 集合命名注意事項(xiàng)
可以使用db.collectionName
獲取一個(gè)集合的內(nèi)容森渐,但是做入,如果集合名稱中包含保留字或者無效的JS
屬性名稱,db.collectionName
就不能正常工作了同衣。假設(shè)要訪問version
集合竟块,不能直接使用db.version
,因?yàn)樗?code>db的一個(gè)方法(會(huì)返回當(dāng)前MongoDB
服務(wù)器的版本):
db.version
function(){
return this.serverBuildInfo().version;
}
為了訪問version
集合耐齐,必須使用getCollection
函數(shù):
> db.getCollection("version");
test.version
注意:JS
屬性名稱只能包含字母浪秘、數(shù)字,以及"$"
和"_"
字符蚪缀,而且不能以數(shù)字開頭秫逝。
還有一種方法可以訪問無效屬性名稱命名的集合,那就是使用數(shù)組訪問語法:在JS
中询枚,x.y
等同于x['y']
违帆。如果需要對(duì)blog
的每一個(gè)自己進(jìn)行操作,可以使用如下方式進(jìn)行迭代:
var collections = ["posts", "comments", "authors"];
for(var i in collections){
print(db.blog[collections[i]]);
}
而不必這樣:
print(db.blog.posts);
print(db.blog.comments);
print(db.blog.authors);
注意:不能使用db.blog.i
金蜀,這樣會(huì)被解釋為test.blog.i
刷后,而不是test.blog.posts
。必須使用db.blog[i]
語法才能將i
解釋為相應(yīng)的變量渊抄〕⒌ǎ可以使用這種方式來訪問那些名字怪異的集合:
> var name = "@#&!"
> db[name].find()
直接使用db.@#&!
是非法的。