對於關係型數據庫,存儲數據的時候須要提早建表建庫,隨着數據的複雜度愈來愈高,所建的表的數量也愈來愈多;可是非關係型卻不須要.程序員
sudo apt-get install -y mongodb-org https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
sudo mongod --config /etc/mongod.conf &
位置:https://docs.mongodb.com/manual/introduction/web
每一個⽂檔都有⼀個屬性, 爲_id, 保證每一個⽂檔的惟⼀性正則表達式
能夠⾃⼰去設置_id插⼊⽂檔,若是沒有提供, 那麼MongoDB爲每一個⽂檔提供了⼀個獨特的_id, 類型爲objectIDsql
objectID是⼀個12字節的⼗六進制數,每一個字節兩位,一共是24 位的字符串: 前4個字節爲當前時間戳 接下來3個字節的機器ID 接下來的2個字節中MongoDB的服務進程id 最後3個字節是簡單的增量值mongodb
db.集合名稱.insert(document)shell
db.stu.insert({name:'gj',gender:1}) db.stu.insert({_id:"20170101",name:'gj',gender:1})
插⼊⽂檔時, 若是不指定_id參數, MongoDB會爲⽂檔分配⼀個惟⼀的ObjectId數據庫
命令:db.集合名稱.save(document)
若是⽂檔的_id已經存在則修改, 若是⽂檔的_id不存在則添加json
命令:db.集合名稱.find()
ubuntu
命令:db.集合名稱.update(<query> ,<update>,{multi: <boolean>})
數組
db.stu.update({name:'hr'},{name:'mnc'}) 更新一條 db.stu.update({name:'hr'},{$set:{name:'hys'}}) 更新一條 db.stu.update({},{$set:{gender:0}},{multi:true}) 更新所有
注意:"multi update only works with $ operators"
命令:db.集合名稱.remove(<query>,{justOne: <boolean>})
⽅法find(): 查詢
db.集合名稱.find({條件⽂檔})
⽅法findOne():查詢,只返回第⼀個
db.集合名稱.findOne({條件⽂檔})
⽅法pretty(): 將結果格式化
db.集合名稱.find({條件⽂檔}).pretty()
可使用如下數據進行練習
{"name" : "郭靖", "hometown" : "蒙古", "age" : 20, "gender" : true } {"name" : "⻩蓉", "hometown" : "桃花島", "age" : 18, "gender" : false } {"name" : "華箏", "hometown" : "蒙古", "age" : 18, "gender" : false } {"name" : "⻩藥師", "hometown" : "桃花島", "age" : 40, "gender" : true } {"name" : "段譽", "hometown" : "⼤理", "age" : 16, "gender" : true } {"name" : "段王爺", "hometown" : "⼤理", "age" : 45, "gender" : true } {"name" : "洪七公", "hometown" : "華⼭", "age" : 18, "gender" : true }
$lt (less than)
$lte (less than equal)
$gt (greater than)
$gte
不等於:$ne
例如:
查詢年齡大於18的全部學生 db.stu.find({age:{$gte:18}})
邏輯運算符主要指與、或邏輯
and:在json中寫多個條件便可
查詢年齡⼤於或等於18, 而且性別爲true的學⽣ db.stu.find({age:{$gte:18},gender:true})
or:使⽤$or, 值爲數組, 數組中每一個元素爲json
查詢年齡⼤於18, 或性別爲false的學⽣ db.stu.find({$or:[{age:{$gt:18}},{gender:false}]}) 查詢年齡⼤於18或性別爲男⽣, 而且姓名是郭靖 db.stu.find({$or:[{age:{$gte:18}},{gender:true}],name:'gj'})
使⽤$in
, $nin
判斷數據是否在某個數組內
查詢年齡爲1八、 28的學⽣ db.stu.find({age:{$in:[18,28,38]}})
使⽤//或$regex編寫正則表達式
查詢sku以abc開頭的數據 db.products.find({sku:/^abc/}) 查詢sku以789結尾的數據 db.products.find({sku:{$regex:'789$'}})
{ "_id" : 100, "sku" : "abc123", "description" : "Single line description." } { "_id" : 101, "sku" : "abc789", "description" : "First line\nSecond line" } { "_id" : 102, "sku" : "xyz456", "description" : "Many spaces before line" } { "_id" : 103, "sku" : "xyz789", "description" : "Multiple\nline description" }
⽅法limit(): ⽤於讀取指定數量的⽂檔
db.集合名稱.find().limit(NUMBER) 查詢2條學⽣信息 db.stu.find().limit(2)
⽅法skip(): ⽤於跳過指定數量的⽂檔
db.集合名稱.find().skip(NUMBER) db.stu.find().skip(2)
同時使用
db.stu.find().limit(4).skip(5) 或 db.stu.find().skip(5).limit(4)
注意:先使用skip在使用limit的效率要高於前者
因爲mongo的shell是一個js的執行環境 使⽤$where後⾯寫⼀個函數, 返回滿⾜條件的數據
查詢年齡⼤於30的學⽣ db.stu.find({ $where:function() { return this.age>30;} })
在查詢到的返回結果中, 只選擇必要的字段
命令:db.集合名稱.find({},{字段名稱:1,...})
參數爲字段與值, 值爲1表示顯示, 值爲0不顯 特別注意: 對於_id列默認是顯示的, 若是不顯示須要明確設置爲0
db.stu.find({},{_id:0,name:1,gender:1})
⽅法sort(), ⽤於對 集進⾏排序
命令:db.集合名稱.find().sort({字段:1,...})
參數1爲升序排列 參數-1爲降序排列
根據性別降序, 再根據年齡升序 db.stu.find().sort({gender:-1,age:1})
⽅法count()⽤於統計結果集中⽂檔條數
命令:db.集合名稱.find({條件}).count()
命令:db.集合名稱.count({條件})
db.stu.find({gender:true}).count() db.stu.count({age:{$gt:20},gender:true})
⽅法distinct()
對數據進⾏去重
命令:db.集合名稱.distinct('去重字段',{條件})
db.stu.distinct('hometown',{age:{$gt:18}})