【Mongodb】MongoDB
文章目錄
- 一 Mongodb介紹及用途
- 二 安裝說明
- 三 如何高效使用mongoDB
- 1、庫操作
- 2、集合操作-CRUD(增刪改查)
- 四 python連接MongoDB
【博客地址】: https://blog.csdn.net/sunyaowu315
【博客大綱地址】: https://blog.csdn.net/sunyaowu315/article/details/82905347
一 Mongodb介紹及用途
MongoDB 屬于文檔型非關系型數據庫,開源、高性能、高可用、可擴展。
MongoDB 介于關系數據庫和非關系數據庫之間,是非關系數據庫當中功能最豐富,最像關系數據庫的。他支持的數據結構非常松散,是類似json的bson格式,因此可以存儲比較復雜的數據類型。Mongo最大的特點是他支持的查詢語言非常強大,其語法有點類似于面向對象的查詢語言,幾乎可以實現類似關系數據庫單表查詢的絕大部分功能,而且還支持對數據建立索引。
特點:
它的特點是高性能、易部署、易使用,存儲數據非常方便。主要功能特性有:
- 面向集合存儲,易存儲對象類型的數據
- 模式自由
- 支持動態查詢
- 支持完全索引,包含內部對象
- 支持查詢
- 支持復制和故障恢復
- 使用高效的二進制數據存儲,包括大型對象(如視頻等)
- 自動處理碎片,以支持云計算層次的擴展性
- 支持RUBY,PYTHON,JAVA,C ,PHP,C#等多種語言
- 文件存儲格式為BSON(一種JSON的擴展)
- 可通過網絡訪問
二 安裝說明
下載鏈接: https://pan.baidu.com/s/1J5wy0XewZaBB6DRrzCXG0g 提取碼: fm8b ,點擊安裝64位的
參考操作方法http://www.ddooo.com/softdown/130308.htm#dltab
三 如何高效使用mongoDB
MongoDB中的三個概念:
數據庫(database): 一個倉庫,在其中可以存放集合。
集合(collection): 概念相當于MySQL中的表,類似于一個數組,在集合中可以存放文檔。
文檔(document): 文檔是數據庫中的最小單位,我們存儲和操作的內容都是文檔。
注意:在MongoDB中,數據庫和集合都不需要手動創建,當我們創建文檔時,如果文檔所在的集合或數據庫不存在會自動創建數據庫和集合。
1、庫操作
基本指令
show dbs/databases: // 查看所有數據庫 use (database): // 進入到指定的數據庫中 db // 顯示當前窗口所處的數據庫 db.stats() // 查看當前數據庫狀態 db.dropDatabase() // 刪除當前數據庫,默認為 test,故要切換到某個數據庫下進行刪除 use myNewDB // 創建數據庫 db.myNewCollection1.insertOne({ x: 1 }) //第一次對該數據庫存儲數據時,自動創建 db.myNewCollection3.createIndex( { y: 1 } ) db.createCollection('數據庫名',options)// 顯性創建collection show collections // 查看所有collection db.gather_A.drop() //刪除collection2、集合操作-CRUD(增刪改查)
Field 的順序和限制
1、_id總是document中的第一個字段
2、更新其他字段內容也會導致字段的順序變化
3、_id這個名稱是保留給主鍵的,這個值在一個collection中必須唯一且不變,可以是除開array以外的任意類型
4、字段名不能以$開頭
5、字段名不能包含.
6、字段名不能包含空字符
基本指令
db.createCollection("gather_A") db.createCollection("collectionName",{capped:true,size:10000,max:100});//size指定集合大小,單位為KB,max指定文檔數量 db.gather_A.count();//統計集合gather_A中的數據數量 #注:mongo中支持js,可通過js操作實現批零處理,如:for(var i=0;i<1000;i++) {db.gather_A.insert({name:"xiaomu"+i,age:20+i});}插入: db.<collection>.insert(doc)
db.gather_A.insert({name:'Tom', age:18, gender:'male'}) db.gather_A.insert([{name:'Jerry', age:18, gender:'male'},{name:'Herry',age:20,gender:'female'}]) #如果插入時沒有給文檔指定_id屬性,則數據庫會自動為文檔添加_id屬性(ObjectId),相關方法: db.<collection>.insertOne() # 插入一個文檔對象 db.<collection>.insertMany()# 插入多個文檔對象查詢:db.<collection>.find()
#查詢集合中的所有文檔,返回的是一個數組。 db.gather_A.find()#可以接收一個對象作為條件參數,表示查詢符合條件的文檔,{}表示查詢所有。 db.gather_A.find({age:20})#支持通過內嵌文檔的屬性進行查詢,通過.來匹配,注意屬性名必須加引號! db.gather_A.find({'hobby.movies':'comedy'}) #并不是說屬性值一定要等于該值,如果屬性值是一個數組,只要數組中包含該值即可!相關方法:db.<collection>.findOne() # 查詢集合中符合條件的第一個文檔,返回的是一個文檔對象。 db.<collection>.find({}).count() # 查詢集合中符合條件的文檔的數量,返回一個數值。 db.<collection>.find({}).limit(10) # 設置返回查詢的數據的上限。 db.<collection>.find({}).skip(10).limit(10) # 返回第11條到第20條數據。 db.<collection>.find({}).sort({num:1, age:-1}) # 傳遞一個對象來指定排序規則,1表示升序,-1表示降序,MongoDB會自動調整sort、skip和limit的位置,誰寫前誰寫后并無大礙。#distinct()對數據進行去重: db.gather_A.distinct('class',{age:{$gt:18}})# 查找年齡大于18的人的班級(去重)#投影 #在做查詢時,可以在第二個參數設置查詢結果的投影,1表示顯示,0表示不顯示。 db.<collection>.find({}, {name:1}) # 顯示該集合文檔的name字段和id字段(id默認顯示)。#運算關系 $gt、$lt、gte、lte #gt(greater than)大于;lt(less than)小于;gte(greater then equal)大于等于;lte(less than equal)小于等于;ne(not equal)不等于 db.gather_A.find({num:{$gt:20, $lt:30}}) # 返回num值大于20小于30的文檔。 #$or表示或,只要滿足數組其中一個條件即可: db.gather_A.find({$or:[{num:{$lt:100}}, {num:{$gt:200}}]}) # 返回num值小于100或者大于200的文檔。#包含關系 db.collection1.find({price:{$all:[1,2]}});//(包含。。并且包含。。)此處price是個數組,此方法查詢所有price包含1和2的數據 db.collection1.find({price:{$in:[1,2]}});//(包含。。或者包含。。)查詢price中含有1或者2的數據 db.collection1.find({price:{$nin:[1,2]}});//(不包含。。并且不包含。。)查詢price中不含有1并且不含有2的數據 db.collection1.find({$or:[{name:"xiaomu"},{price:{$in:[3]}}]});//(。。或者。。)查詢name為xiaomu或者價格包含3的數據 db.collection1.find({$nor:[{name:"xiaomu"},{name:"xiaoli"}]});//(既不也不)查詢name不為xiaomu或者name不為xiaoli的數據#分頁 db.collection1.find().skip(0).limit(10);//查詢從0條開始,查詢10條,skip()方法默認參數為 0 ,表示跳過的條數#排序 db.collection1.find().sort({age:1});//按照年齡升序排序,為-1的話表示降序排序#存在 db.gather_A.find({hight:{$exists:1}});//查詢存在hight字段的數據更新:db.<collection>.update({查詢條件},{新對象},{options})
update命令格式:
db.collection.update(criteria,objNew,upsert,multi)
參數說明:
criteria: 查詢條件
objNew: update對象和一些更新操作符
upsert: 如果不存在update的記錄,是否插入objNew這個新的文檔,true為插入,默認為false,不插入。
multi: 默認是false,只更新找到的第一條記錄。如果為true,把按條件查詢出來的記錄全部更新。
#默認情況下會使用新對象來替換舊的對象。 #如果需要修改指定的屬性而不是替換,需要使用修改操作符來完成修改 $set #可以用來增加或修改文檔中的指定屬性 db.gather_A.update({"_id":1}, {$set:{age:22,address:'China'}}) $unset #可以用來刪除文檔中的指定屬性 db.gather_A.update({"_id":1}, {$unset:{address:'這里是什么不重要,反正要刪除'}}) update()#默認情況下只改變一個,如果需要同時修改多個,增加第三個配置參數{multi:true},或者使用updateMany()。 #如果屬性是一個數組,需要往數組中加入新的元素,則可以使用操作符$push: db.gather_A.update({username:'Tom'},{$push:{'hobby.movies':'Mr Bean'}}) $each#可以對數組進行解構:{$push: {a: {$each: [1,2]}}} —— 向數組a中加入1和2。 $addToSet#操作符也可向數組中添加一個新元素,與$push的區別是,不允許添加重復的元素。 #使用操作符$pop從數組中移除一個元素,1代表最后一個元素,-1代表第一個元素: {$pop: {a: 1}} # 從數組a中移除最后一個元素 {$pop: {a: -1}} # 從數組a中移除第一個元素 #使用操作符$pull從數組中移除所有的指定元素: {$pull: {a: 5}} # 移除數組a中所有值為5的元素。 #使用操作符$pullAll來移除所有的多個指定元素: {$pullAll: {a: [5, 6]}} # 移除數組a中所有值為5或6的元素。 #讓屬性值在原有基礎上自增,使用操作符$inc: db.gather_A.updateMany({num:{$lt:1000}}, {$inc:{num:400}}) # 讓所有num小于1000的文檔num值增加400 #相關方法: db.<collection>.updateOne() #修改一個符合條件的文檔 db.<collection>.updateMany() # 修改多個符合條件的文檔 db.<collection>.replaceOne() # 替換一個文檔中的某些屬性 db.collection.update() when used with the upsert: true option. db.collection.updateOne() when used with the upsert: true option. db.collection.updateMany() when used with the upsert: true option. db.collection.findAndModify() when used with the upsert: true option. db.collection.findOneAndUpdate() when used with the upsert: true option. db.collection.findOneAndReplace() when used with the upsert: true option. db.collection.save(). db.collection.bulkWrite(). #1,$inc增加值 db.test.update({'id':2},{'$inc':{'id':2}}) 其中后面兩個雙引號是必須的 db.test.update({'id':6},{$inc:{id:2}}) 在mongodb交互環境中這么來寫 #2,$set設置字段值 db.test.update({'id':6},{'$set':{'id':2}}) db.test.update({'id':6},{$set:{id:2}}) #3,$unset刪除某字段 db.test.update({'id':6},{'$unset':{'id':6}}) db.test.update({'id':6},{$unset:{id:6}}) #4,$rename重命名某字段 db.test.update({'id':1},{'$rename':{'id':'userid'}}) db.test.update({id:10},{$rename:{id:'userid'}})刪除:db.<collection>.remove({},Boolean)
remove()#必須傳入參數,可以根據條件對象來刪除文檔,傳遞條件的方式和find()一樣,默認情況下會同時刪除多個,相當于deleteMany()。 #如果傳入第二個參數為true,則只會刪除一個,相當于deleteOne()。 #如果傳入第一個參數對象為{},則會清空所有的文檔,相當于刪除集合,但是性能比較差,不如用db.<collection>.drop()。 #相關方法: db.<collection>.deleteOne() # 刪除一個 db.<collection>.deleteMany() # 刪除多個 db.<collection>.drop() # 刪除集合 #一般在實際生產中,數據不會真正地刪除,而是做邏輯刪除。比如給集合中的每個文檔增加一個數據字段isDel,設置值為1,標記為刪除。四 python連接MongoDB
#導入包 import pymongo #創建pymongo庫調用函數 def Mongo_connect(dbname, base):dbs = pymongo.MongoClient('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 27017)#庫# 連接mydb數據庫,賬號密碼認證db = dbs[dbname]db.authenticate("xxx", "xxxxxxxxxxxxxxxxxx")#賬號+密碼# 連接表collection = db[base]dbs.close()return collection #實例應用 connect = Mongo_connect(dbname='data_base', base='gather_A') find1 = connect.find().skip(10).limit(10)總結
以上是生活随笔為你收集整理的【Mongodb】MongoDB的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Python】透视表、统计表、汇总表、
- 下一篇: 【Mysql】纯sql报表