日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

MongoDB入门教程(1)

發布時間:2024/4/11 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MongoDB入门教程(1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(一)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 distinct命令和find類似,只不過多了一個去重功能。> 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中的使用。

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的MongoDB入门教程(1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。