[MongoDb] 常用指令

餓死抬頭

基本指令

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
});
#組合查詢修改刪除