MongoDB經常使用命令

最近新的項目中使用了MongoDB,因此也就花了點時間學習了一下。這篇文章給本身的學習作一個總結,打算往後把這篇文章當作API來使用,也分享給一些準備學習的小夥伴,但願能幫到大家。
date: 2018-04-25 20:49:12mysql

MongoDB經常使用命令

  最近新的項目中使用了MongoDB,因此也就花了點時間學習了一下。這篇文章給本身的學習作一個總結,順便往後把這篇文章當作API來使用,也分享給一些準備學習的小夥伴,但願能幫到大家。sql


基礎知識

  • mongo使用的默認數據庫名是test。 若是沒有建立任何數據庫,那麼集合及操做的數據將被保存在test數據庫。
  • mongo中數據所有使用類json的文檔格式表示,mongo中稱爲「bson」,下文中我會用「document」進行代替。
  • mongo與mysql的數據集合對應關係:
    • db=database,數據庫沒什麼好說的。
    • table=collection,在mongo中,集合有點相似於表的概念。
    • mongo中字段仍是有比較大的區別的,mongo的字段不是根據collection的設定而決定的,是根據數據決定。好比,有以下兩條數據在同一collection中:
    {"_id":1,"name":"Bob","age":18}
    {"_id":2,"city":"北京"}
    你在可視化工具中看到的字段多是_id、name、age、city,只不過第一條數據city爲空,第二條數據name與age爲空;然而狀況卻並非這樣的,要講兩條數據分開理解,它們只是單純的歸屬於同一個聚合下而已,經過collection.find("_id":1)獲取回的數據,不會包含name與age,有點相似於二維數組,每一維的數組(數據)都是各自獨立的。

數據庫集合操做

  • use DATABASE_NAME
    例:use mydb
    將會跳轉到名爲mydb的數據庫,若是該數據庫不存在,則建立該數據庫。
  • db
    查看當前選擇的數據庫
  • show dbs
    查看數據庫列表
  • db.dropDatabase()
    刪除當前數據庫
  • db.collections.drop()
    刪除當前集合

新增(Create)

  • insert
    db.COLLECTION_NAME.insert(document)
    若不指定_id則會自動生成一個隨機惟一的id,插入多條記錄可使用
    db.COLLECTION_NAME.insert([doucument,document])
    例:
db.col.insert({
    title: 'MongoDB',by: 'bfsan',tags:['mongodb', 'database', 'NoSQL'],likes: 100
})

此外還有inserOne()和inserMany(),使用這兩個方法能夠返回插入文檔的id值,用法與insert一致。mongodb

更新(Update)

  • update
db.collection.update(
    <query>,
    <update>,
    {
        upsert: <boolean>,//true則對於不存在對應狀況的記錄會新增,存在則會修改
        multi: <boolean>,//true則會修改多條記錄
        writeConcern: <document>//(可選)寫安全,用的很少,詳細內容請再查詢
    })

例:數據庫

db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );//對count>15的全部記錄,count=count+1
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );//對查詢是否存在count>4的記錄,存在則爲查到的第一條記錄(增長/修改)test5=OK,不存在則增長一條test5=OK的記錄
  • save
db.collection.save(
    <document>,
    {writeConcern: <document>}
)

save方法經過傳入文檔來替換已有文檔,如不指定id則爲新增,自動分配id,若是指定_id,替換包含_id的記錄的所有數據。json

刪除(Delete)

  • delete
db.collection.remove(
    <query>,//當條件爲空時,則清空該collection
    {
        justOne: <boolean>, //true或1,則只刪除第一個文檔
        writeConcern: <document>
    })

查詢(Retrieve)

  • find
db.collection.find(<query>, <projection>)//query條件,省略則查詢全部;projection投影出指定的列,省略則顯示全部列

查詢條件

功能 語法
等於 {key:value}
小於 {key:{$lt:value}}
小於或等於 {key:{$lte:value}}
大於 {key:{$gt:value}}
大於或等於 {key:{$gte:value}}
不等於 {key:{$ne:value}}
and {key1:value1, key2:value2}
or {$or:[{key1: value1},{key2:value2}]}
not {key:{$not:value}}
in {key:{$in:array}}
not in {key:{$nin:array}}
all {key:{$all:array}}
是否存在 {key:{$exists:true/false}}
匹配某種數據類型的記錄 {key:{$type:type}}

結果處理

.pretty()       //格式化結果顯示,使結果格式自動縮進符合規範。
.limit(n)       //顯示前n條記錄
.skip(n)        //跳過前n條記錄
.sort({key:1/-1})   //排序,1升序,-1降序

注:當查詢時同時使用sort,skip,limit,不管調用前後,執行順序老是sort-skip-limit。數組

鏈接查詢

  • 借用變量進行中轉,必需使用findOne方法才能存儲進變量
var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})
  • $lookup指令
    mongo提供的左外鏈接查詢,語法格式爲
    $lookup:{from,localField,foreignField,as}
    須要使用聚合命令來操做,格式爲
    db.COLLECTION_NAME.aggreate({$lookup:{from,localField,foreignField,as}})
    • from,所要關聯的集合名
    • localField,本集合中的「外鍵」
    • foreignField,所要關聯集合中的字段
    • as,輸出鏈接的文檔所到的字段名

聚合

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
經常使用操做:
    {$project:{key:1/0}}    修改輸入文檔的結構。能夠用來重命名、增長或刪除字段,也能夠用於建立計算結果以及嵌套文檔。
    {$match:{query}}    用於過濾數據,只輸出符合條件的文檔。
    {$limit:n}      用來限制返回的文檔數。
    {$skip:n}       在跳過指定數量的文檔。
    {$sort:{key:1/-1}}  將文檔排序後輸出。
    $group          將集合中的文檔分組,可用於統計結果。
相關文章
相關標籤/搜索