餓死抬頭
基本指令
mongo #執行檔mongodb 用來連入DB, 預設port 27017
db.auth("admin","{PASSWORD}") #以admin 身分登入
show dbs #顯示DB
use dbname #切換dbname, 注意大小寫, 用法跟MySql類似
show collections #顯示集合
db.createCollection(‘users’) #建立users集合
db.users.drop() #刪除集合users
db.runCommand({"drop","users"}) #同上一行
db.runCommand({"dropDatabase": 1}) #刪除目前DB
Help 命令
odb.help();
odb.yourColl.help();
odb.youColl.find().help();
db.dropDatabase() #刪除當前DB
db.cloneDatabase(“127.0.0.1”) #從指定的機器上複製DB
db.copyDatabase("mydb", "temp", "127.0.0.1") #從指定的機器複製到本地的 temp DB
db #查看當前DB
db.version() #查看版本
db.getMongo() #查看當前的db 版本
新增刪除修改
新增
-
save()
db.users.save({"name":"lecaf"}) #建立一個 users的集合 並且寫入一筆{"name":"lecaf"} 資料
-
insert()
db.users.insert({"name":"ghost", "age":10}) #在users集合中寫入逼以新資料,如果没有users,mongodb會自動建立一個
save()和insert()也存在著些許區別:若新增的數據主鍵已經存在,insert()會不做操作並提示錯誤,而save() 則更改原來的內容為新內容。
insert({ _id : 1, " name " : " n1 "}) ,_id是主键
insert({ _id : 1, " name " : " n2 " }) 會顯示錯誤, 因為1已經有資料了
save({ _id : 1, " name " : " n2 " }) 會把 n1 更新為 n2 ,類似update。
删除
db.users.remove() #刪除users集合所有資料
db.users.remove({"name": "lecaf"}) #刪除users集合下name=lecaf的該筆資料
查詢
db.users.find() #查詢users集合中所有資料
db.users.find({“name”:”feng”}) #查詢users集合中符合name=feng的所有資料
db.users.findOne() #查詢users集合中的第一筆資料
db.users.findOne({“name”:”feng”}) #查詢users集合中name=feng的第一筆資料
修改
db.users.update({"name":"lecaf"}, {"age":10})
#修改資料,其中name=lecaf 為查詢條件,"age":10是修改内容,除了主键,其他内容会被第二個參數替換,主键不能修改, 只能新增刪除.
進階應用
條件查詢
db.collection.find({ "key" : value }) #查詢key=value的資料
db.collection.find({ "key" : { $gt: value } }) #key > value
db.collection.find({ "key" : { $lt: value } }) #key < value
db.collection.find({ "key" : { $gte: value } }) #key >= value
db.collection.find({ "key" : { $lte: value } }) #key <= value
db.collection.find({ "key" : { $gt: value1 , $lt: value2 } }) #value1 < key <value2
db.collection.find({ "key" : { $ne: value } }) #key <> value
db.collection.find({ "key" : { $mod : [ 10 , 1 ] } }) #條件運算, 相當於key % 10 == 1
db.collection.find({ "key" : { $nin: [ 1, 2, 3 ] } }) #不屬於 1,2,3任一
db.collection.find({ "key" : { $in: [ 1, 2, 3 ] } }) #屬於 1,2,3任一
db.collection.find({ "key" : { $size: 1 } }) #$size 值為1
db.collection.find({ "key" : { $exists : true|false } }) # 字串 "key"存在則返回true, 反之 false
db.collection.find({ "key": /^val.*val$/i }) #正則表示式, "i"忽略大小寫, "m" 可查詢多行
db.collection.find({ $or : [{a : 1}, {b : 2} ] }) #$or或 (備註:MongoDB 1.5.3板之後才支援),a=1或者b=2的資料都會列出
db.collection.find({ "key": value , $or : [{ a : 1 } , { b : 2 }] }) #符合條件key=value ,a=1或者b=2的資料都會列出
db.collection.find({ "key.subkey" :value }) #内嵌對象中的值查詢,注意:"key.subkey"必須加上引號
db.collection.find({ "key": { $not : /^val.*val$/i } }) #這是一個與其他查詢條件組合使用的操作符,不會單獨使用。上述查詢條件得到的結果集加上$not之後就能獲得相反的集合
排序
db.collection.find({}).sort({ "key1" : -1 ,"key2" : 1 })
#1代表升冪排列,-1代表降冪
其他
b.collection.find({}).limit(5) #控制返回結果數量,如果參數是0,則當作沒有約束,limit()將不起作用(會對傳入參數求求絕對值)
db.collection.find({}).skip(5) #控制返回結果跳過多少數量,如果參數是0,則當作沒有約束,skip()將不起作用,或者說跳過了0條。 (參數不能為負數)可用於分頁,limit是pageSize;skip 是第n頁*pageSize
db.collection.find({}).skip(5).limit(5) #可用來做分頁,跳過5條數據再取5條數據
db.collection.find({}).count(true)
count() #返回結果集的條數
db.collection.find({}).skip(5).limit(5).count(true)
#在加入skip()和limit()這兩個操作時,要獲得實際返回的結果數,需要一個參數true,否則返回的是符合查詢條件的結果,而不是數量
db.users.findAndModify({
query: {age: {$gte: 25}},
sort: {age: -1},
update: {
$set: {name: 'a2'},
$inc: {age: 2}
},
remove: true
});
#組合查詢修改刪除