自定義MongoDB操作函數
可以把自己寫的js代碼儲存在某個地方,讓MongoDB加載它,然後就可以在MongoDB的指令行裡操作它們。
mongodb shell預設會加載~/.mongorc.js檔案
例如以下修改了啟動提示文字、左側提示文字,增加了my_show_shards shell函數用于顯示目前sharded collection的chunks在各分片的負載情況:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<code>//~/.mongorc.js </code>
<code>//show at begin </code>
<code>var</code> <code>compliment = [</code><code>"attractive"</code><code>, </code><code>"intelligent"</code><code>, </code><code>"like batman"</code><code>]; </code>
<code>var</code> <code>index = Math.floor(Math.random()*3); </code>
<code>print(</code><code>"Hello, you're looking particularly "</code> <code>+ compliment[index] + </code><code>" today!"</code><code>);</code>
<code>//change the prompt </code>
<code>prompt = </code><code>function</code><code>(){ </code>
<code> </code><code>if</code> <code>(</code><code>typeof</code> <code>db == </code><code>"undefined"</code><code>) { </code>
<code> </code><code>return</code> <code>"(nodb)> "</code><code>; </code>
<code> </code><code>} </code>
<code> </code><code>// Check the last db operation </code>
<code> </code><code>try</code> <code>{ </code>
<code> </code><code>db.runCommand({getLastError: 1}); </code>
<code> </code><code>catch</code> <code>(e) { </code>
<code> </code><code>print(e); </code>
<code> </code><code>return</code> <code>db + </code><code>"> "</code><code>; </code>
<code>}</code>
<code>//show all shard's chunks </code>
<code>function</code> <code>my_show_shards() { </code>
<code> </code><code>var</code> <code>config_db = db.getSiblingDB(</code><code>"config"</code><code>); </code>
<code> </code><code>var</code> <code>collections = {}; </code>
<code> </code><code>var</code> <code>shards = {}; </code>
<code> </code><code>var</code> <code>shard_it = config_db.chunks.find().snapshot();</code>
<code> </code><code>while</code> <code>(shard_it.hasNext()) { </code>
<code> </code><code>next_item = shard_it.next(); </code>
<code> </code><code>collections[JSON.stringify(next_item[</code><code>"ns"</code><code>]).replace(/\</code><code>"/g, "</code><code>")] = 1; </code>
<code> </code><code>shards[JSON.stringify(next_item["</code><code>shard</code><code>"]).replace(/\"/g, "</code><code>")] = 1; </code>
<code> </code><code>var list_collections = []; </code>
<code> </code><code>var list_shards = []; </code>
<code> </code><code>for (item in collections) { </code>
<code> </code><code>list_collections.push(item); </code>
<code> </code><code>for (item in shards) { </code>
<code> </code><code>list_shards.push(item); </code>
<code> </code><code>}</code>
<code> </code><code>list_collections.forEach(function(collec) { </code>
<code> </code><code>list_shards.forEach(function(item) { </code>
<code> </code><code>obj = {}; </code>
<code> </code><code>obj["</code><code>shard</code><code>"] = item; </code>
<code> </code><code>obj["</code><code>ns"] = collec; </code>
<code> </code><code>it = config_db.chunks.find(obj); </code>
<code> </code><code>print(collec, item, it.count()); </code>
<code> </code><code>}) </code>
<code> </code><code>}) </code>
<code></code>
本文轉自UltraSQL51CTO部落格,原文連結: http://blog.51cto.com/ultrasql/1707354,如需轉載請自行聯系原作者