MongoDB入門理解

      MongoDB中,一個數據庫包含多個集合(相似關係型數據庫的表),一個集合包含多個文檔(相似關係型數據庫的一行記錄),文檔存儲方式是類JSON的BSON存儲數據,BSON能夠理解爲在JSON格式上添加了一些JSON沒有的數據類型。正則表達式

文檔:sql

        兩個文檔之間有 嵌入式關係 和 引用式關係數據庫

 

集合:json

        集合就是各類文檔的集合,MongoDB的同一個集合能夠存儲不一樣結構的多個文檔,例如:數組

{"company":"Chenshi keji"} {"people":"man","name":"peter"}

元數據

數據庫的信息存儲在集合中,他們統一使用系統的命名空間:DBNAME.system.* DBNAME 可用 db 或數據庫名替代服務器

  • DBNAME.system.namespaces :列出全部名字空間
  • DBNAME.system.indexs :列出全部索引
  • DBNAME.system.profile :列出數據庫概要信息
  • DBNAME.system.users :列出訪問數據庫的用戶
  • DBNAME.system.sources :列出服務器信息

 

數據庫操做:數據結構

  1. show dbs 查看全部數據庫
  2. db 查看當前的數據庫對象或者集合
  3. use dbName 鏈接到dbName數據庫

 

集合的操做:app

  • 建立集合    
db.createCollection("users")   //無參

 

db.createCollection("shiyanlou2", { capped : 1, autoIndexID : 1, size : 6142800, max : 10000 } )

參數描述:函數

  • capped:類型爲 Boolean,若是爲 true 則建立一個固定大小的集合,當其條目達到最大時能夠自動覆蓋之前的條目。在設置其爲 true 時也要指定參數大小;
  • autoIndexID:類型爲 Boolean,默認爲 false,若是設置爲 true,則會在 _id field.s 上自動建立索引;
  • size:若是 capped 爲 true 須要指定,指定參數的最大值,單位爲 byte;
  • max:指定最大的文檔數。 在 Mongodb 中也能夠不用建立集合,由於在建立文檔的時候也會自動的建立集合。

 

  • 查看集合
show collections
  • 刪除集合
db.users.drop

 

文檔的操做:post

  • 數據的插入
insert()

db.users.insert([

... { name : "jam",

... email : "jam@qq.com"... },

... { name : "tom",

... email : "tom@qq.com"... }

... ])

        save()

db.users.save([

... { name : "jam",

... email : "jam@qq.com"... },

... { name : "tom",

... email : "tom@qq.com"... }

... ])

 

  • 數據的查詢

        查詢整個集合

db.users.find()             

db.users.find().pretty()   //更美觀的顯示方式

        and查詢

db.users.find({ key1: value1, key2: value2 }).pretty()

        or查詢

db.users.find(

{

    $or: [

        {key1: value1},

        {key2: value2}

        ]

    }

).pretty()

    同時使用and和or

db.post.find({

    "number": {$gt:10},

    $or: [

        {"by": "shiyanlou"},

        {"title": "MongoDB Overview"}

        ]

}).pretty()

    {$gt:10} 表示大於10,另外,$lt 表示小於,$lte 表示小於等於,$gte 表示大於等於,$ne 表示不等於

 

  • 數據的更新
db.shiyanlou.update({"user_id":2,"e-mail":"test@qq.com"},{$set:{"e-mail":"group@qq.com"}})
  • 將 user_id=2 的文檔的 e-mail 改成 group@qq.com
  • 第一個大括號內容標示查找條件,第二個大括號內容則表示更新後的數據
  • 默認的 update 函數只對一個文檔更新,若是想做用全部文檔,則須要加入 multi:true

 

  • 替換已存在的數據
db.shiyanlou.save({"_id":ObjectId("53ea174ccb4c62646d9544f4"),"name":"Bob","position":"techer"})

       _id 對應的是要替換文檔的 _id

  • 刪除數據
db.shiyanlou.remove({"name":"Bob"})

 

  • 條件操做符

 

  • 雙精度型-1
  • 字符串-2
  • 對象-3
  • 數組-4
  • 二進制數據-5
  • 對象ID-7
  • 布爾類型-8
  • 數據-9
  • 空-10
  • 正則表達式-11
  • JS代碼-13
  • 符號-14
  • 有做用域的JS代碼-15
  • 32位整型數-16
  • 時間戳-17
  • 64位整型數-18
  • Min key-255
  • Max key-127

db.shiyanlou.find({"name":{$type:2}})

查找name是字符串的文檔記錄。

 

  • limit與skip
db.shiyanlou.find().limit(1)    //讀取一條記錄,默認是排在最前面的那條被讀取

db.shiyanlou.find().limit(1).skip(1)       //讀取時跳過指定數量的記錄

 

  • sort()
db.COLLECTION_NAME.find().sort({KEY:1|-1})     //升序1 降序-1

 

例如:

db.shiyanlou.find().sort({"time":1}

 

  • 索引ensureIndex()

索引是特殊的數據結構,存儲在容易遍歷讀取的數據集合裏,是對數據庫集合中的一個或者多個文檔的值進行排序的一種結構。

db.COLLECTION_NAME.ensureIndex({KEY:1|-1})       //升序1 降序-1

例如:

db.shiyanlou.ensureIndex({"name":1})

 

  • 查詢分析

     explain()顯示查詢的詳細元數據

db.users.find({gender:"M"},{user_name:1,_id:0}).explain()

      結果中字段解釋:

  • indexOnly:爲 true ,表示咱們使用了索引;
  • cursor:由於這個查詢使用了索引,MongoDB 中索引存儲在 B 樹結構中,因此這是也使用了 BtreeCursor 類型的遊標。若是沒有使用索引,遊標的類型是 BasicCursor。這個鍵還會給出你所使用的索引的名稱,你經過這個名稱能夠查看當前數據庫下的 system.indexes 集合(系統自動建立)來獲得索引的詳細信息;
  • n:當前查詢返回的文檔數量;
  • nscanned/nscannedObjects:代表當前此次查詢一共掃描了集合中多少個文檔,咱們的目的是,讓這個數值和返回文檔的數量越接近越好;
  • millis:當前查詢所需時間,毫秒數;
  • indexBounds:當前查詢具體使用的索引。
相關文章
相關標籤/搜索