歡迎您光臨本站 註冊首頁

· mongodb 入門雜誌閱讀

MongoDB入門教程,MongoDB介紹、安裝、指令操作

admin @ 2020-04-29 reply:0

(一)MongoDB介紹 MongoDB是一個NoSQL資料庫,它是跨平臺的,基於分散式檔案儲存的資料庫,由C++語言編寫的(這點很重要,則表示在Linux下需要安裝gcc環境)。MongoDB是以文件的形式儲存資料,資料結構由鍵值(key:value)對組成,類似JSON。 MongoDB結構,最小的單位為文件(類似MySQL的行),每一個文件用的是BSON形式來儲存(類似JSON),文件的上一層為集合(類似MySQL的表),再上一級為庫(類似MySQL的資料庫)。

(二)MongoDB安裝 MongoDB的安裝分為Linux和Windows。在Windows下的安裝及其簡單. https://jingyan.baidu.com/article/6079ad0eb74fa828fe86db5f.html windows下安裝教程。 在Linux下的安裝大致分為Ubuntu版本和CentOS兩種版本。 https://jingyan.baidu.com/article/0a52e3f4217e65bf62ed729a.html CentOS下安裝教程。 https://www.cnblogs.com/zhangdaicong/p/7492494.html Ubuntu下安裝教程。

(三)MongoDB的指令操作 按照上面的安裝完成後,就可以使用MongDB了,操作的指令都是一樣的,我自己使用的是Linux,所以下面都以Linux為例。 找到你安裝MongDB目錄,如果不知道,可以透過ps -ef | grep mongo 來檢視mongodb所在的位置,在Linux下,MonggoDB是隨著Linux一起啟動的。如果你不小心關閉了,可以透過命令service mongodb start來啟動服務(注意,此處的啟動服務不是使用MongDB),透過命令 service mongodb stop關閉服務。  下面才是真正的使用MongoDB,上面已經教了怎么查詢mongpdb的位置,找到位置之後呢,透過命令 ./mongo 進入到MongoDB的真正服務中,也就是到了此處才是真正的使用MongoDB。
總結一波:
pe -ef | grep mongodb 檢視mongodb的目錄和看是否啟動 service mongodb start 啟動mongodb服務 service mongodb stop 關閉mongodb服務 ./mongo 真正使用mongodb服務
在mongodb中,我們就要學習mongodb 的指令了,類似於學習sql一樣,注意:在MongoDB中,是區分大小寫的,要特別注意這一點。
先從庫級別的指令開始:
> show dbs; 檢視資料庫,會顯示當前的資料庫,以及佔用的記憶體大小。 local 0.078125GB 注意:該命令不會顯示空的資料庫,也就是說你新建的資料庫沒資料是不會顯示的。 > db 檢視當前使用者連線的是哪個庫,沒錯就是這2個字元。 test > use xuye 建立一個庫,名為xuye switched to db xuye > use xuye 注意上面我們db檢視當前庫是test,現在我們切換到xuye這個庫了。 switched to db xuye use的命令有兩個作用,一個是切換庫,如果這個庫不存在就是建立庫。 > db 檢視當前連線的庫,此時使用的是xuye這個庫。 xuye > db.dropDatabase() 刪除當前連線的資料庫,類似對物件呼叫方法的操作,db表示當前的使用者 { "dropped" : "xuye", "ok" : 1 } dropDatabase()函式表示執行刪除操作,下面的是返回值。 > show users 顯示當前使用者,沒有資料則不顯示
集合(類似MySQL的表級別)級別的指令:
需要注意的是,在集合中,可以隨意儲存任何想幹或者不想乾的資料,並不像關係型資料庫中已經定死了這個列必須是什么值,必須按照這個格式,如果現在不理解,待會看下面。
> db.createCollection("user",{size:20,capped:true,autolndexld:true,max:50}) { "ok" : 1 } 在當前庫下建立了一個集合,該集合自動新增索引,並且該集合為固定長度,20位元組,集合中最多包包含50個文件。
db.createCollection(name,option),其中option是一個json格式,可選引數以及資訊如下。
一些集合級別的其它操作
> db.getCollectionNames() [ "system.indexes", "user" ] > show collections system.indexes user 兩個指令都是獲得到當前庫下的所有集合名。 > db.getCollection("user") 獲得到單個的集合資訊 xuye.user > db.printCollectionStats(); 會顯示當前庫下集合的建立資訊,例如MySQL的檢視錶設定的資訊。 user { "ns" : "xuye.user", "count" : 0, "size" : 0, "storageSize" : 4096, "numExtents" : 1, "nindexes" : 1, "lastExtentSize" : 4096, "paddingFactor" : 1, "systemFlags" : 1, "userFlags" : 0, "totalIndexSize" : 8176, "indexSizes" : { "_id_" : 8176 }, "capped" : true, "max" : 50, "ok" : 1 } > db.user.drop() 刪除當前庫下的user集合。 true
文件級別的操作指令:
> db.student.insert({"name":"xuye","school":"hafo","numbe":141420014}) 插入一條文件,我並沒有建立集合student,直接寫插入語句,如果表不存在會自動建立(一般都是使用此方式來建表,而不是去用createColletion()建立表,此方式的容量會自動增長。) > db.student.insert({"class":101,"number":1401420,"teach":"xuye"}) 在插入一條文件,可以發現,兩條文件之間的格式要求是沒有任何關係的,甚至你可以隨便插入不是關於學生此類的資訊都可以,但是一般一個表只插入一類資訊的文件(約定成俗的)。 > db.student.find() 檢視該集合中所有的文件。 { "_id" : ObjectId("5b7d1aa979c725e3580ed2db") } { "_id" :
ObjectId("5b7d1b1d79c725e3580ed2dc"), "name" : "xuye", "school" : "hafo", "numbe" : 141420014 } { "_id" : ObjectId("5b7d1c57c8ff91d6ecaf79d8"), "class" : 101, "number" : 1401420, "teach" : "xuye" } 此處還需要注意,我們並沒有插入_id這個東西,這是mongodb自動幫我們生成的一個id,是唯一的,所以也就不需要我們去生成id了。 > db.student.find().pretty() { "_id" : ObjectId("5b7d1aa979c725e3580ed2db") } { "_id" : ObjectId("5b7d1b1d79c725e3580ed2dc"), "name" : "xuye", "school" : "hafo", "numbe" : 141420014 } 格式化顯示查詢的語句,應該還有幾條,我只取了其中一條貼上在這裡,就類似程式碼的格式化,好看一些。 >
db.student.insert({"name":"xuye","number":140246,"deskmate":{"name":"xiaobai","number":140265}}) 插入一條複雜一些的文件,可以巢狀,和json一樣,只要符合鍵值對的形式都可以使用。如果多個巢狀的話,要使用中括弧,如下。 db.student.insert({"name":"xuye","number":140246,"deskmate":[{"name":"xiaobai","number":140265}, {"name":"xiaohei","number":"142064"}]})
分頁查詢:
> db.books.insert({"name":"spring","price":20.01}) > db.books.insert({"name":"springMvc","price":19.99}) > db.books.insert({"name":"java","price":67.84}) > db.books.insert({"name":"linux","price":289.78}) > db.books.insert({"name":"python","price":29.78}) > db.books.insert({"name":"c++","price":157.68}) 先插入一些資料,書名和書的價格。 > db.books.find() { "_id" : ObjectId("5b7d4a588e6123a7a302be25"), "name" : "spring", "price" : 20.01 } { "_id" : ObjectId("5b7d4a6b8e6123a7a302be27"), "name" : "springMvc", "price" : 19.99 } { "_id" : ObjectId("5b7d4a7f8e6123a7a302be28"), "name" : "java", "price" : 67.84 } { "_id" : ObjectId("5b7d4a898e6123a7a302be29"), "name" : "linux", "price" : 289.78 } { "_id" : ObjectId("5b7d4a9f8e6123a7a302be2a"), "name" : "python", "price" : 29.78 } { "_id" : ObjectId("5b7d4aad8e6123a7a302be2b"), "name" : "c++", "price" : 157.68 } 檢視資料,下面進行分頁。 > db.books.find().skip(0).limit(3) { "_id" : ObjectId("5b7d4a588e6123a7a302be25"), "name" : "spring", "price" : 20.01 } { "_id" : ObjectId("5b7d4a6b8e6123a7a302be27"), "name" : "springMvc", "price" : 19.99 } { "_id" : ObjectId("5b7d4a7f8e6123a7a302be28"), "name" : "java", "price" : 67.84 } 分頁查詢,表示查到的資料,從第一條開始,顯示3條。類似SQL的limit 0,3。也可以記為,跳過0條,顯示3條。 > db.books.find().limit(3).skip(0) { "_id" : ObjectId("5b7d4a588e6123a7a302be25"), "name" : "spring", "price" : 20.01 } { "_id" : ObjectId("5b7d4a6b8e6123a7a302be27"), "name" : "springMvc", "price" : 19.99 } { "_id" : ObjectId("5b7d4a7f8e6123a7a302be28"), "name" : "java", "price" : 67.84 } limit和skip兩個函式可以更換位置,結果都一樣。 > db.books.find().limit(3) 等同於db.books.find().skip(0).limit(3) > db.books.find().skip(5) 跳過前5條,顯示第六條以後的所有文件。
帶條件的查詢:(and、or、gt、lt、正則、去重、排序等查詢)
> db.books.find({"name":"spring"}) { "_id" : ObjectId("5b7d4a588e6123a7a302be25"), "name" : "spring", "price" : 20.01 } 查詢name為spring的書籍,在find函式的裡面加上json格式的條件即可。 > db.books.find({"name":"spring","price":20.01}) { "_id" : ObjectId("5b7d4a588e6123a7a302be25"), "name" : "spring", "price" : 20.01 } 多條件查詢,使用逗號分隔即可,類似select * form books where name="spring" and price=20.01 > db.books.find({$or:[{"name":"spring"},{"name":"java"}]}) { "_id" : ObjectId("5b7d4a588e6123a7a302be25"), "name" : "spring", "price" : 20.01 } { "_id" : ObjectId("5b7d4a7f8e6123a7a302be28"), "name" : "java", "price" : 67.84 } 查詢nam為spring或者java的書籍,格式為find({$or : [{},{}]}) 中括弧裡面填寫每一個json格式的條件,類似select * form books where name="spring" or name="java" > db.books.find({"price":{$gte : 100}}) { "_id" : ObjectId("5b7d4a898e6123a7a302be29"), "name" : "linux", "price" : 289.78 } { "_id" : ObjectId("5b7d4aad8e6123a7a302be2b"), "name" : "c++", "price" : 157.68 } 查詢價格大於等於100的書籍。 > db.books.find({"price":{$lte : 20}}) { "_id" : ObjectId("5b7d4a6b8e6123a7a302be27"), "name" : "springMvc", "price" : 19.99 } 查詢價格小於等於20的書籍。 > db.books.find({"price":{$gte:100,$lte:200}}) { "_id" : ObjectId("5b7d4aad8e6123a7a302be2b"), "name" : "c++", "price" : 157.68 } 查詢價格大於等於100並且小於等於200的書籍。 > db.books.find({$or:[{"price":{$gt:200}},{"price":{$lt:20}}]}) { "_id" : ObjectId("5b7d4a6b8e6123a7a302be27"), "name" : "springMvc", "price" : 19.99 } { "_id" : ObjectId("5b7d4a898e6123a7a302be29"), "name" : "linux", "price" : 289.78 } 查詢價格大於200或者價格小於20的書籍,or的操作有點另類,一定要寫在一開始的key上。 注意:gt為大於,gte為大於等於,lt為小於,lte為小於等於,e為equals。
因為帶提交查詢的指令內容太多,上面這一部分主要是大於和小於,and和or的指令。下面是去重,正則的條件查詢。
> db.books.insert({"name":"spring","price":22.05}) 先插入一條name同為spring的文件 > db.books.distinct("name") [ "spring", "springMvc", "java", "linux", "python", "c++" ] 根據name去重,類似select distinct name from books > db.books.distinct("name",{"price":{$lt:30}}) [ "spring", "springMvc", "python" ] 查詢出價格小於30的書籍,然後根據name去重,類似select distinct name from books where price<30>db.books.find({"name":/spring/}) { "_id" : ObjectId("5b7d4a588e6123a7a302be25"), "name" : "spring", "price" : 20.01 } { "_id" : ObjectId("5b7d4a6b8e6123a7a302be27"), "name" : "springMvc", "price" : 19.99 } { "_id" : ObjectId("5b7d58deabdfa1fbe797fa0b"), "name" : "spring", "price" : 22.05 } 使用正規表示式查詢,/等同於%,類似select *from books where name like %spring% > db.books.find({"name":/spring/}).skip(1).limit(2) { "_id" : ObjectId("5b7d4a6b8e6123a7a302be27"), "name" : "springMvc", "price" : 19.99 } { "_id" : ObjectId("5b7d58deabdfa1fbe797fa0b"), "name" : "spring", "price" : 22.05 } 搜尋後的分頁查詢,在搜尋欄輸入內容後的查詢功能,類似select *from books where name like %spring% limit 1,2。正規表示式內容較多,具體可自己網上查詢。 > db.books.find({},{"price":1}) { "_id" : ObjectId("5b7d4a588e6123a7a302be25"), "price" : 20.01 } { "_id" : ObjectId("5b7d4a6b8e6123a7a302be27"), "price" : 19.99 } { "_id" : ObjectId("5b7d4a7f8e6123a7a302be28"), "price" : 67.84 } { "_id" : ObjectId("5b7d4a898e6123a7a302be29"), "price" : 289.78 } { "_id" : ObjectId("5b7d4a9f8e6123a7a302be2a"), "price" : 29.78 } { "_id" : ObjectId("5b7d4aad8e6123a7a302be2b"), "price" : 157.68 } { "_id" : ObjectId("5b7d58deabdfa1fbe797fa0b"), "price" : 22.05 } 只顯示price列,格式find({},{key1:1,key2:1}),第一個{}表示查詢的條件,第二個為顯示的列資訊,多個用逗號隔開,類似select price from books,但是_id它是必須顯示的。 > db.books.find({},{"price":1}).sort({"price":1}) { "_id" : ObjectId("5b7d4a6b8e6123a7a302be27"), "price" : 19.99 } { "_id" : ObjectId("5b7d4a588e6123a7a302be25"), "price" : 20.01 } { "_id" : ObjectId("5b7d58deabdfa1fbe797fa0b"), "price" : 22.05 } { "_id" : ObjectId("5b7d4a9f8e6123a7a302be2a"), "price" : 29.78 } { "_id" : ObjectId("5b7d4a7f8e6123a7a302be28"), "price" : 67.84 } { "_id" : ObjectId("5b7d4aad8e6123a7a302be2b"), "price" : 157.68 } { "_id" : ObjectId("5b7d4a898e6123a7a302be29"), "price" : 289.78 } 查詢後只顯示price列,並且按照價格升序,類似select price from books order by price > db.books.find({},{"price":1}).sort({"price":-1}) 與上面相反,按價格降序。 > db.books.find().count() 7 返回查詢結果的總記錄數。 > db.books.findOne() 查詢第一條記錄
修改和刪除指令:
> db.books.update({"name":"java"},{$set:{"name":"javase","price":50.01}}) 把name為java的這條資料更新為name=javase和price=50.01。格式update({},{}),第一個{}為要更改的資料,第二個為要修改為什么資料。類似update books set name="javase" and price=50.01 where name="java" 注意,如果存在多個name為java的則只修改一個,下面看如何更新多個。之前我們存在名為spring的書籍有兩本。現在把這兩本價格都修改為50. > db.books.update({"name":"spring"},{$set : {"price":50}},{multi:true}) > db.books.find() { "_id" : ObjectId("5b7d4a588e6123a7a302be25"), "name" : "spring", "price" : 50 } { "_id" : ObjectId("5b7d58deabdfa1fbe797fa0b"), "name" : "spring", "price" : 50 } 結果為name為spring的都修改了,{multi:true}表示是否修改多行,預設是為false。 > db.books.remove({"name":"spring"}) > db.books.find() { "_id" : ObjectId("5b7d4a6b8e6123a7a302be27"), "name" : "springMvc", "price" : 19.99 } { "_id" : ObjectId("5b7d4a898e6123a7a302be29"), "name" : "linux", "price" : 289.78 } { "_id" : ObjectId("5b7d4a9f8e6123a7a302be2a"), "name" : "python", "price" : 29.78 } { "_id" : ObjectId("5b7d4aad8e6123a7a302be2b"), "name" : "c++", "price" : 157.68 } 刪除name為spring的書籍,預設是存在多少個就刪除多少個,與update相反。 > db.books.remove({}) 刪除當前集合的所有資料,不要亂用。
索引的操作指令:
> db.books.ensureIndex({"name":1,"price":-1}) 建立組合索引,mongodb會自動為索引建立名字,如果{}裡面為一個,則為單個索引,多個就為組合索引,其中1和-1表示索引的方向。 > db.books.ensureIndex({"price":1},{"name":"index_price"}) 建立一個索引,並指定索引的名字。 > db.books.ensureIndex({"name":1},{"unique":true}) 為name建立一個唯一索引 > db.books.getIndexes() 檢視當前集合中的索引資訊。 > db.system.indexes.find() { "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.student", "name" : "_id_" } { "v" : 1, "key" : { "_id" : 1 }, "ns" : "test.books", "name" : "_id_" } { "v" : 1, "key" : { "name" : 1, "price" : 1 }, "ns" : "test.books", "name" : "name_1_price_1" } { "v" : 1, "key" : { "price" : 1 }, "ns" : "test.books", "name" : "index_price" } { "v" : 1, "key" : { "name" : 1 }, "unique" : true, "ns" : "test.books", "name" : "name_1" } 索引的資訊存在每個資料庫的system.indexes集合裡面,這裡是檢視所有的索引資訊,需要與上面區別開。 > db.books.dropIndex("name_1") { "nIndexesWas" : 4, "ok" : 1 } 刪除在books集合中索引名為name_1的索引 > db.books.dropIndexes() { "nIndexesWas" : 3, "msg" : "non-_id indexes dropped for collection", "ok" : 1 } 刪除在books集合中的所有索引。 基礎部分到此結束,下面部分的內容是關於mongodb的許可權和使用者的操作指令,以及語句塊和在java中的使用。

[admin via ] MongoDB入門教程,MongoDB介紹、安裝、指令操作已經有883次圍觀

http://coctec.com/magazine/show-post-item-145.html