MongoDB 常用命令與經驗

思維之上發表於2017-08-08

Mongo基本設定

1. mongod服務開啟: mongod –auth –dbpath /var/lib/mongodb
2. mongodb資料及日誌檔案儲存位置: /var/lib/mongodb /var/log/mongodb
3. mongodb 連線服務及開啟shell: mongo 使用者所屬資料庫 -u 使用者名稱 -p 密碼 ,也可以直接執行命令“mongo”開啟shell,然後進入到對應的資料庫中再執行“db.auth(‘user’,’passwd’)”

注意:除了admin資料庫的使用者對其他資料庫都有操作許可權之外,每個資料庫的使用者只對自己的資料庫有操作許可權

4. 遠端連線mongodb mongo 主機ip:27017/資料庫 -u 使用者名稱 -p 然後再輸入密碼


MongoDB 常用命令

1. 檢視資料庫系統資訊

  • show dbs
  • show collections
  • db.stats() :檢視當前使用的資料庫的資訊
  • db.myCollection.stats():檢視當前資料庫中myCollection集合的資訊

2. 檢視資料庫集合的資訊

  • db.myCollection.find():找到myCollection集合中的全部資訊,後面常用的函式:

    pretty():列印出找到的所有條目、
    hasNext():判斷當前集合是否還有下一條條目
    next():顯示當前條目,並將cursor移動到下一個
    forEach(<func>):遍歷當前集合的每一個條目,並對其執行func函式

3. 建立使用者及修改密碼: 進入到對應的資料執行如下程式碼建立使用者

db.createUser(
    {
        user: 'xxx',
        pwd: 'xxx',
        roles: [
            {role:'read',db:'test'}
        ]
    }
)

執行如下程式碼修改密碼

db.changeUserPassword('使用者名稱','密碼')

4. 插入命令

db.mycolleciton.inser()
db.myCollection.insertOne({
    name:"果凍",
    score:{
        "數學":100,
        "音樂":94, //中文字串也可以作為key
})
db.myCollection.insertMany()

5. 查詢命令

db.myCollection.find({name:"果凍"})

db.myCollection.find({name:{$in:[ "果凍", "D"]}}) //$表示運算子

db.inventory.find( { status: "A", qty: { $lt: 30 } } ) //and

db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } ) //or

db.myCollection.find( { size: { h: 14, w: 21, uom: "cm" } } ) //巢狀查詢,被巢狀項必須全部包含,如不能只有“{h:14}”

db.myCollecton.find({"size.h":14})//巢狀查詢,用dot來連線巢狀項,但是整個表示式需用引號包住

//對於包含 tags:["red","blank"] 鍵值對document的collection
db.myCollection.find({tags:["red","blank"]})
db.myCollection.find({tags:"red"})

//dim_cm是一個Array,此外列表中還可以嵌入document
db.myCollection.find( { dim_cm: { $gt: 15, $lt: 20 } } )//dim_cm中任意元素滿足gt和lt的任一項
db.myCollection.find({dim_cm:{$elemMatch:{$gt:15,$lt:20}}})//dim_cm中任意元素同時滿足gt和lt
db.myCollection.find({"dim_cm.1":{$gt:20}})//dim_cm中的第二個元素大於20
dm.myCollection.find({dim_cm:{$size:3}})

//project field(投影)
db.inventory.find({status:"A"},{item:1}) //相當於select _id,item from dnventory where statud="A",可以宣告 _id:0取消_id投影
db.inventory.find({status:"A"},{instock:{$slice:-1}) //$slice表示選擇instock的最後一個

//對於為空的鍵或者不包含的鍵
db.inventory.find({item:null})//所有item為空後者不包含item的document
db.inventory.find({item:{$type:10}})//所有item為空的document
db.inventory.find({item:{$exits:false}})//所有不包含item的document

6. 更新命令

//對於匹配不到document的命令,update和replace會插入一個document
db.inventory.update()

db.inventory.updateOne(
   { item: "paper" },
   {
     $set: { "size.uom": "cm", status: "P" },
     $currentDate: { lastModified: true }
   }
)//如果lastModified不存在,會建立,update不能更改_id,除非用replace

db.inventory.updateMany()

db.inventory.replaceOne(
   { item: "paper" },
   { item: "paper", instock: [ { warehouse: "A", qty: 60 }, { warehouse: "B", qty: 40 } ] }
)

7. 刪除命令

db.inventory.deleteMany({}) //刪除所有
db.inventory.deleteOne({}) //刪除匹配的第一個
db.inventory.delete({})

Mongo shell資料型別

1. Date(): return current date as string
2. NumberLong(“12345678”) NumberInt(“12345678”) NumberDecimal(“1213.423452342”): mongo shell將所有的數都預設視為64位浮點數,NumberLong,NumberInt分別將資料作為string接收作為64位和32位整數處理,NumberDecimal將接收String作為128位的浮點數處理


未完,待續

相關文章