9/18 mongodb常用命令

成功啟動(dòng)MongoDB后抛虫,再打開(kāi)一個(gè)命令行窗口輸入mongo是趴,就可以進(jìn)行數(shù)據(jù)庫(kù)的一些操作滞详。輸入help可以看到基本操作命令谣殊,只是MongoDB沒(méi)有創(chuàng)建數(shù)據(jù)庫(kù)的命令拂共,但有類似的命令

如:如果你想創(chuàng)建一個(gè)“myTest”的數(shù)據(jù)庫(kù),先運(yùn)行use myTest命令姻几,之后就做一些操作(如:db.createCollection('user')),這樣就可以創(chuàng)建一個(gè)名叫“myTest”的數(shù)據(jù)庫(kù)宜狐。

一势告、數(shù)據(jù)庫(kù)常用命令

1、Help查看命令提示

代碼如下:

help

db.help();

db.yourColl.help();

db.youColl.find().help();

rs.help();

2抚恒、切換/創(chuàng)建數(shù)據(jù)庫(kù)

代碼如下:

use yourDB; 當(dāng)創(chuàng)建一個(gè)集合(table)的時(shí)候會(huì)自動(dòng)創(chuàng)建當(dāng)前數(shù)據(jù)庫(kù)

3咱台、查詢所有數(shù)據(jù)庫(kù)

代碼如下:

show dbs;

4、刪除當(dāng)前使用數(shù)據(jù)庫(kù)

代碼如下:

db.dropDatabase();

5俭驮、從指定主機(jī)上克隆數(shù)據(jù)庫(kù)

代碼如下:

db.cloneDatabase(“127.0.0.1”); 將指定機(jī)器上的數(shù)據(jù)庫(kù)的數(shù)據(jù)克隆到當(dāng)前數(shù)據(jù)庫(kù)

6回溺、從指定的機(jī)器上復(fù)制指定數(shù)據(jù)庫(kù)數(shù)據(jù)到某個(gè)數(shù)據(jù)庫(kù)

代碼如下:

db.copyDatabase("mydb", "temp", "127.0.0.1");將本機(jī)的mydb的數(shù)據(jù)復(fù)制到temp數(shù)據(jù)庫(kù)中

7、修復(fù)當(dāng)前數(shù)據(jù)庫(kù)

代碼如下:

db.repairDatabase();

8混萝、查看當(dāng)前使用的數(shù)據(jù)庫(kù)

代碼如下:

db.getName();

db; db和getName方法是一樣的效果遗遵,都可以查詢當(dāng)前使用的數(shù)據(jù)庫(kù)

9、顯示當(dāng)前db狀態(tài)

代碼如下:

db.stats();

10逸嘀、當(dāng)前db版本

代碼如下:

db.version();

11瓮恭、查看當(dāng)前db的鏈接機(jī)器地址

代碼如下:

db.getMongo();

二、Collection聚集集合

1厘熟、創(chuàng)建一個(gè)聚集集合(table)

代碼如下:

db.createCollection(“collName”, {size: 20, capped: 5, max: 100});//創(chuàng)建成功會(huì)顯示{“ok”:1}

//判斷集合是否為定容量db.collName.isCapped();

2屯蹦、得到指定名稱的聚集集合(table)

代碼如下:

db.getCollection("account");

3、得到當(dāng)前db的所有聚集集合

代碼如下:

db.getCollectionNames();

4绳姨、顯示當(dāng)前db所有聚集索引的狀態(tài)

代碼如下:

db.printCollectionStats();

三登澜、用戶相關(guān)

1、添加一個(gè)用戶

代碼如下:

db.addUser("name");

db.addUser("userName", "pwd123", true); 添加用戶飘庄、設(shè)置密碼脑蠕、是否只讀

2、數(shù)據(jù)庫(kù)認(rèn)證跪削、安全模式

代碼如下:

db.auth("userName", "123123");

3谴仙、顯示當(dāng)前所有用戶

代碼如下:

show users;

4、刪除用戶

代碼如下:

db.removeUser("userName");

四碾盐、聚集集合查詢

1晃跺、查詢所有記錄

代碼如下:

db.userInfo.find();

相當(dāng)于:select* from userInfo;

默認(rèn)每頁(yè)顯示20條記錄,當(dāng)顯示不下的情況下毫玖,可以用it迭代命令查詢下一頁(yè)數(shù)據(jù)掀虎。注意:鍵入it命令不能帶“;”

但是你可以設(shè)置每頁(yè)顯示數(shù)據(jù)的大小付枫,用DBQuery.shellBatchSize= 50;這樣每頁(yè)就顯示50條記錄了烹玉。

2、查詢?nèi)サ艉蟮漠?dāng)前聚集集合中的某列的重復(fù)數(shù)據(jù)

代碼如下:

db.userInfo.distinct("name");

會(huì)過(guò)濾掉name中的相同數(shù)據(jù)

相當(dāng)于:select distict name from userInfo;

3阐滩、查詢age = 22的記錄

代碼如下:

db.userInfo.find({"age": 22});

相當(dāng)于:select * from userInfo where age = 22;

4二打、查詢age > 22的記錄

代碼如下:

db.userInfo.find({age: {$gt: 22}});

相當(dāng)于:select * from userInfo where age >22;

5、查詢age < 22的記錄

代碼如下:

db.userInfo.find({age: {$lt: 22}});

相當(dāng)于:select * from userInfo where age <22;

6掂榔、查詢age >= 25的記錄

代碼如下:

db.userInfo.find({age: {$gte: 25}});

相當(dāng)于:select * from userInfo where age >= 25;

7继效、查詢age <= 25的記錄

代碼如下:

db.userInfo.find({age: {$lte: 25}});

8症杏、查詢age >= 23 并且 age <= 26

代碼如下:

db.userInfo.find({age: {$gte: 23, $lte: 26}});

9、查詢name中包含 mongo的數(shù)據(jù)

代碼如下:

db.userInfo.find({name: /mongo/});

//相當(dāng)于%%

[code]select * from userInfo where name like ‘%mongo%';

10莲趣、查詢name中以mongo開(kāi)頭的

代碼如下:

db.userInfo.find({name: /^mongo/});

select * from userInfo where name like ‘mongo%';

11、查詢指定列name饱溢、age數(shù)據(jù)

代碼如下:

db.userInfo.find({}, {name: 1, age: 1});

相當(dāng)于:select name, age from userInfo;

當(dāng)然name也可以用true或false,當(dāng)用ture的情況下河name:1效果一樣喧伞,如果用false就是排除name,顯示name以外的列信息绩郎。

12潘鲫、查詢指定列name、age數(shù)據(jù), age > 25

代碼如下:

db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});

相當(dāng)于:select name, age from userInfo where age >25;

13肋杖、按照年齡排序

代碼如下:

升序:db.userInfo.find().sort({age: 1});

降序:db.userInfo.find().sort({age: -1});

14溉仑、查詢name = zhangsan, age = 22的數(shù)據(jù)

代碼如下:

db.userInfo.find({name: 'zhangsan', age: 22});

相當(dāng)于:select * from userInfo where name = ‘zhangsan' and age = ‘22';

15、查詢前5條數(shù)據(jù)

代碼如下:

db.userInfo.find().limit(5);

相當(dāng)于:selecttop 5 * from userInfo;

16状植、查詢10條以后的數(shù)據(jù)

代碼如下:

db.userInfo.find().skip(10);

相當(dāng)于:select * from userInfo where id not in (

selecttop 10 * from userInfo

);

17浊竟、查詢?cè)?-10之間的數(shù)據(jù)

代碼如下:

db.userInfo.find().limit(10).skip(5);

可用于分頁(yè),limit是pageSize津畸,skip是第幾頁(yè)*pageSize

18振定、or與 查詢

代碼如下:

db.userInfo.find({$or: [{age: 22}, {age: 25}]});

相當(dāng)于:select * from userInfo where age = 22 or age = 25;

19、查詢第一條數(shù)據(jù)

代碼如下:

db.userInfo.findOne();

相當(dāng)于:selecttop 1 * from userInfo;

db.userInfo.find().limit(1);

20肉拓、查詢某個(gè)結(jié)果集的記錄條數(shù)

代碼如下:

db.userInfo.find({age: {$gte: 25}}).count();

相當(dāng)于:select count(*) from userInfo where age >= 20;

21后频、按照某列進(jìn)行排序

代碼如下:

db.userInfo.find({sex: {$exists: true}}).count();

相當(dāng)于:select count(sex) from userInfo;

五、索引

1暖途、創(chuàng)建索引

代碼如下:

db.userInfo.ensureIndex({name: 1});

db.userInfo.ensureIndex({name: 1, ts: -1});

2卑惜、查詢當(dāng)前聚集集合所有索引

代碼如下:

db.userInfo.getIndexes();

3、查看總索引記錄大小

代碼如下:

db.userInfo.totalIndexSize();

4驻售、讀取當(dāng)前集合的所有index信息

代碼如下:

db.users.reIndex();

5露久、刪除指定索引

代碼如下:

db.users.dropIndex("name_1");

6、刪除所有索引索引

代碼如下:

db.users.dropIndexes();

六欺栗、修改抱环、添加、刪除集合數(shù)據(jù)

1纸巷、添加

代碼如下:

db.users.save({name: ‘zhangsan', age: 25, sex: true});

添加的數(shù)據(jù)的數(shù)據(jù)列镇草,沒(méi)有固定,根據(jù)添加的數(shù)據(jù)為準(zhǔn)

2瘤旨、修改

代碼如下:

db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);

相當(dāng)于:update users set name = ‘changeName' where age = 25;

db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);

相當(dāng)于:update users set age = age + 50 where name = ‘Lisi';

db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);

相當(dāng)于:update users set age = age + 50, name = ‘hoho' where name = ‘Lisi';

3梯啤、刪除

代碼如下:

db.users.remove({age: 132});

4、查詢修改刪除

代碼如下:

db.users.findAndModify({

query: {age: {$gte: 25}},

sort: {age: -1},

update: {$set: {name: 'a2'}, $inc: {age: 2}},

remove: true

});

db.runCommand({ findandmodify : "users",

query: {age: {$gte: 25}},

sort: {age: -1},

update: {$set: {name: 'a2'}, $inc: {age: 2}},

remove: true

});

update 或 remove 其中一個(gè)是必須的參數(shù); 其他參數(shù)可選存哲。

參數(shù)詳解???? 默認(rèn)值

query??? 查詢過(guò)濾條件??? {}

sort??? 如果多個(gè)文檔符合查詢過(guò)濾條件因宇,將以該參數(shù)指定的排列方式選擇出排在首位的對(duì)象七婴,該對(duì)象將被操作??? {}

remove??? 若為true,被選中對(duì)象將在返回前被刪除??? N/A

update??? 一個(gè) 修改器對(duì)象

N/A

new??? 若為true察滑,將返回修改后的對(duì)象而不是原始對(duì)象打厘。在刪除操作中,該參數(shù)被忽略贺辰。??? false

fields??? 參見(jiàn)Retrieving a Subset of Fields (1.5.0+)

All fields

upsert??? 創(chuàng)建新對(duì)象若查詢結(jié)果為空户盯。 示例 (1.5.4+)

false

七、語(yǔ)句塊操作

1饲化、簡(jiǎn)單Hello World

代碼如下:

print("Hello World!");

這種寫(xiě)法調(diào)用了print函數(shù)莽鸭,和直接寫(xiě)入"Hello World!"的效果是一樣的;

2吃靠、將一個(gè)對(duì)象轉(zhuǎn)換成json

代碼如下:

tojson(new Object());

tojson(new Object('a'));

3硫眨、循環(huán)添加數(shù)據(jù)

代碼如下:

> for (var i = 0; i < 30; i++) {

... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});

... };

這樣就循環(huán)添加了30條數(shù)據(jù),同樣也可以省略括號(hào)的寫(xiě)法

代碼如下:

> for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});

也是可以的巢块,當(dāng)你用db.users.find()查詢的時(shí)候礁阁,顯示多條數(shù)據(jù)而無(wú)法一頁(yè)顯示的情況下,可以用it查看下一頁(yè)的信息族奢;

4氮兵、find 游標(biāo)查詢

代碼如下:

>var cursor = db.users.find();

> while (cursor.hasNext()) {

printjson(cursor.next());

}

這樣就查詢所有的users信息,同樣可以這樣寫(xiě)

代碼如下:

var cursor = db.users.find();

while (cursor.hasNext()) { printjson(cursor.next); }

同樣可以省略{}號(hào)

5歹鱼、forEach迭代循環(huán)

代碼如下:

db.users.find().forEach(printjson);

forEach中必須傳遞一個(gè)函數(shù)來(lái)處理每條迭代的數(shù)據(jù)信息

6泣栈、將find游標(biāo)當(dāng)數(shù)組處理

代碼如下:

var cursor = db.users.find();

cursor[4];

取得下標(biāo)索引為4的那條數(shù)據(jù)

既然可以當(dāng)做數(shù)組處理,那么就可以獲得它的長(zhǎng)度:cursor.length();或者cursor.count();

那樣我們也可以用循環(huán)顯示數(shù)據(jù)

代碼如下:

for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);

7弥姻、將find游標(biāo)轉(zhuǎn)換成數(shù)組

代碼如下:

> var arr = db.users.find().toArray();

> printjson(arr[2]);

用toArray方法將其轉(zhuǎn)換為數(shù)組

8南片、定制我們自己的查詢結(jié)果

只顯示age <= 28的并且只顯示age這列數(shù)據(jù)

代碼如下:

db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);

db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);

排除age的列

代碼如下:

db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);

9、forEach傳遞函數(shù)顯示信息

代碼如下:

db.things.find({x:4}).forEach(function(x) {print(tojson(x));});

八庭敦、其他

1疼进、查詢之前的錯(cuò)誤信息

代碼如下:

db.getPrevError();

2、清除錯(cuò)誤記錄

代碼如下:

db.resetError();

查看聚集集合基本信息

1秧廉、查看幫助? db.yourColl.help();

2伞广、查詢當(dāng)前集合的數(shù)據(jù)條數(shù)? db.yourColl.count();

3、查看數(shù)據(jù)空間大小 db.userInfo.dataSize();

4疼电、得到當(dāng)前聚集集合所在的db db.userInfo.getDB();

5嚼锄、得到當(dāng)前聚集的狀態(tài) db.userInfo.stats();

6、得到聚集集合總大小 db.userInfo.totalSize();

7蔽豺、聚集集合儲(chǔ)存空間大小 db.userInfo.storageSize();

8区丑、Shard版本信息? db.userInfo.getShardVersion()

9、聚集集合重命名 db.userInfo.renameCollection("users"); 將userInfo重命名為users

10、刪除當(dāng)前聚集集合 db.userInfo.drop();

代碼如下:

show dbs:顯示數(shù)據(jù)庫(kù)列表

show collections:顯示當(dāng)前數(shù)據(jù)庫(kù)中的集合(類似關(guān)系數(shù)據(jù)庫(kù)中的表)

show users:顯示用戶

use :切換當(dāng)前數(shù)據(jù)庫(kù)沧侥,這和MS-SQL里面的意思一樣

db.help():顯示數(shù)據(jù)庫(kù)操作命令可霎,里面有很多的命令

db.foo.help():顯示集合操作命令,同樣有很多的命令宴杀,foo指的是當(dāng)前數(shù)據(jù)庫(kù)下癣朗,一個(gè)叫foo的集合,并非真正意義上的命令

db.foo.find():對(duì)于當(dāng)前數(shù)據(jù)庫(kù)中的foo集合進(jìn)行數(shù)據(jù)查找(由于沒(méi)有條件旺罢,會(huì)列出所有數(shù)據(jù))

db.foo.find( { a : 1 } ):對(duì)于當(dāng)前數(shù)據(jù)庫(kù)中的foo集合進(jìn)行查找旷余,條件是數(shù)據(jù)中有一個(gè)屬性叫a,且a的值為1

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末主经,一起剝皮案震驚了整個(gè)濱河市荣暮,隨后出現(xiàn)的幾起案子庭惜,更是在濱河造成了極大的恐慌罩驻,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件护赊,死亡現(xiàn)場(chǎng)離奇詭異惠遏,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)骏啰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門节吮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人判耕,你說(shuō)我怎么就攤上這事透绩。” “怎么了壁熄?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵帚豪,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我草丧,道長(zhǎng)狸臣,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任昌执,我火速辦了婚禮烛亦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘懂拾。我一直安慰自己煤禽,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布岖赋。 她就那樣靜靜地躺著呜师,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贾节。 梳的紋絲不亂的頭發(fā)上汁汗,一...
    開(kāi)封第一講書(shū)人閱讀 51,624評(píng)論 1 305
  • 那天衷畦,我揣著相機(jī)與錄音,去河邊找鬼知牌。 笑死祈争,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的角寸。 我是一名探鬼主播菩混,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扁藕!你這毒婦竟也來(lái)了沮峡?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤亿柑,失蹤者是張志新(化名)和其女友劉穎邢疙,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體望薄,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疟游,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痕支。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片颁虐。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖卧须,靈堂內(nèi)的尸體忽然破棺而出另绩,到底是詐尸還是另有隱情,我是刑警寧澤花嘶,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布笋籽,位于F島的核電站,受9級(jí)特大地震影響察绷,放射性物質(zhì)發(fā)生泄漏干签。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一拆撼、第九天 我趴在偏房一處隱蔽的房頂上張望容劳。 院中可真熱鬧,春花似錦闸度、人聲如沸竭贩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)留量。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間楼熄,已是汗流浹背忆绰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留可岂,地道東北人错敢。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像缕粹,于是被迫代替她去往敵國(guó)和親稚茅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容