Mongodb資料庫的安裝及使用
-
Linux下安裝
- 準備內容:需要有一個MongoDB在Linux下的安裝包
- 解壓縮安裝包
解壓到桌面即可
tar -zxvf mongo....gz - 將解壓完成的的檔案中的內容移動到 /usr/local/mongodb 目錄下
sudo mv mongodb...af/ /usr/local/mongodb
/usr/local/mongodb : mongodb的安裝路徑 - 在mongodb目錄下建立data目錄,在data目錄下建立db及log目錄
目前db的路徑為 /usr/local/mongodb/data/db
文件連結 密碼:i5dg
-
windows下的安裝:視覺化簡單安裝,詳見上面安裝文件。
-
使用:
一、啟動
1.在windows中啟動:
1.切換到 安裝目錄的bin目錄下
e: 切換碟符
2. cd E:\Program Files\MongoDB\Server\3.4\bin 切換路徑
3.啟動服務端,並指定資料的儲存路徑
格式: mongod --dbpath=資料儲存路徑
如: mongod --dbpath=E:\Program Files\MongoDB\Server\3.4\data\db
注意有些需要加上引號 mongod --dbpath="E:\Program Files\MongoDB\Server\3.4\data\db"4.啟動客端端 --- 注:不要關閉服務
1.先啟動cmd =,切換到 安裝目錄的bin目錄下
2.執行啟動
格式: mongo.exe 看到 > 即可
2.Linux下啟動:
1.啟動mongodb的伺服器端
進入到mongodb的bin目錄下,執行以下命令
./mongod -dbpath=data/db的路徑
./mongod -dbpath=/usr/local/mongodb/data/db
見到port為27017時代表啟動成功2.啟動mongodb的客戶端 (之前的伺服器端不能關閉,重新開啟一個終端)
進入到mongodb的bin目錄下,執行以下命令
./mongo
二、資料庫操作
1.檢視所有的資料庫
格式:show databases;
簡寫:show dbs;
2.建立或者使用一個數據庫
格式: use 資料庫名;use school;
當對應的資料庫不存在的時候,表示建立該資料庫
如果資料庫已經存在,表示使用該資料庫注意:如果建立了一個新的資料庫,而該資料庫中沒有資料,則使用
show dbs檢視的時候,任然看不到,插入資料庫後,即可檢視到
插入資料如: db.student.insert({name:"haha"})
3.檢視當前使用的資料庫
格式: db 代表的是當前資料庫
或者 db.getName() 可以檢視當前資料庫的名字
4.刪除當前資料庫db.dropDatabase()
5.幫助命令 help
6.退出
exit
三、集合的操作 ---相當於關係型資料庫的 表
1.檢視當前庫中的所有集合
格式: show collections;
2.建立一個集合
方式1: db.createCollection("集合名") 集合名需要加上引號
例:db.createCollection("集合名")
方式2: db.集合名.insert(資料)
例:db.student2.insert({name:"張三"})區別: 方式1是建立一個空的集合,如果集合已經存在,不會覆蓋建立
方式2:如果對應的集合不存在表示建立一個集合,並插入資料
如果對應的集合存在,表示直接插入一條資料!
3.刪除一個集合
格式: db.集合名.drop()
四、文件的操作
相當於關係型資料庫表中一行資料 row
1.插入資料
1_1.新增一個數據
格式: db.集合名.insert(資料)
資料: key-value的形式
是bson格式, 與json格式一樣
格式:
1_ 1_1. {key1:value,key2:value, keyN:value}
1_1_ 2. [ {key1:value,key2:value, keyN:value}, {key1:value,key2:value, keyN:value}] jsonArray
1_1_3. {key1:巢狀json資料,key2:value, keyN:value}例:
db.student.insert({name:'張三',age:66,address:"北京",sex:"男"})
WriteResult({ "nInserted" : 1 })表示插入成功
注意: mongodb插入資料的時候,會預設生成一個 _id相當於關係型資料庫中的主健
如: "_id" : ObjectId("5b8f45c12e3e35173c33f13c")
1_2.新增多個數據
格式: db.集合名.insert([資料1,資料2,資料n])
例:db.student.insert([{name:'李四',age:66,address:"北京",sex:"女"},{name:'王 五',age:56,address:"陝西",sex:"女"},{name:'趙六',age:46,address:"上海",sex:"男"},{name:'田 七',age:76,address:"西安",sex:"男"},{name:'吳九',age:86,address:"東京",sex:"男"}])
1_3.插入資料 save 儲存
格式: db.集合名.save(資料) 使用方法與insert一致
例:db.student.save({name:'張某某',age:30,address:"大理",sex:"未知"})
insert和save區別:
如果使用save設定_id屬性,且_id已經存在時, 會修改資料
而使用insert設定_id屬性,_id已經存在時, 會報錯。
2.查詢資料---結果是 bson的形式
2_1.查詢所有的資料
格式: db.集合名.find()
2_2.根據條件來查詢資料 --關係資料庫: select 欄位名, from 表 where 條件
格式: db.集合名.find(query,names)
引數query是查詢條件
引數names 是要展示的欄位名注意: query,names都是json的資料格式
query引數 如: {age:76} 表示查詢age = 76的資料
names引數 如: {name:1,age:1} 表示只顯示name屬性和age屬性
注意如果沒有names,則所有的屬性及值都顯示
1表示顯示, 0 表示不顯示需求:查詢年齡是76歲的人的姓名,地址
例:db.student.find({age:76},{name:1,age:1})
2_3.查詢一條資料
格式: db.集合名.findOne(query,names)
例:db.student.findOne({name:'李四'})
2_4.根據_id來查詢
例:db.student.findOne({"_id":ObjectId("5b8fc2cf739ba435b9c6be32")})
2_5.格式化查詢結果
格式: db.集合名.find().pretty()
例:db.student.find().pretty()
3.資料的修改
格式:db.集合名.update(query,set,{upsert:布林型別,multi:布林型別})
引數都是json的格式
3_1.query 查詢條件
3_2.set 要修改的屬性和對應的屬性值
需求: 將李四的性別改為男
例:db.student.update({name:'李四'},{sex:'男'})
注意: 如果以以上方式修改,是將整個資料改為 {sex:'男'},而不是隻修改sex屬性
只修該屬性:
格式:db.集合名.update(query,{$set:{屬性名:屬性值}})db.student.update({name:'張三'},{$set:{sex:'女'}})
格式:db.集合名.update(query,{$inc:{屬性名:值}})
例:db.student.update({name:"田七"},{$inc:{age:10}})
表示在某個屬性上新增某個值
3_3. upsert 表示在修改資料的時候,如果查詢條件沒有找到對應的資料,
是否將修改的內容當作新的資料新增到集合中
true 表示新增進來
false 表示不當作新資料新增進來
預設是false
例:
db.student.update({name:"孫某某"},{address:"深圳"},{upsert:true})
3_4.multi 表示在修改資料的時候,如果查詢出了多條符合條件的資料,是否將多條資料全部進行修改
true 表示全部都修改
false 表示值修改匹配的第一條資料預設是false
例:
> db.student.update({sex:"女"},{$set:{address:"上海"}},{multi:true})
4.刪除資料 ---- delete from 表名 where 條件
格式:db.集合名.remove(query,{justOne:布林值})
例:
db.student.remove({address:"深圳"})
db.student.remove({sex:"男"},{justOne:true})
注意:預設會將所有符合條件的資料都刪除,
justOne表示是否只刪除 第一條符合條件的資料
true 只刪除一條, false表示全部刪除, 預設為false
五、查詢條件
1.比較運算子
$gt 大於
$lt 小於
$gte 大於等於
$lte 小於等於
$eq 等於 或者 :
$ne 不等於
格式: db.集合名.find({欄位名:{運算子:值}})
需求:查詢年齡大於60的student
例:
db.student.find({age:{$gt:60}})
2.邏輯運算子
$and 且 或者 ,
格式1: db.集合名.find({條件1,條件2})
格式2:db.集合名.find({$and:[{條件1},{條件2}]})
需求:找出年齡在50歲以上,60歲以下的女性的資料?
> db.student.find({$and:[{sex:"女"},{age:{$gt:50}},{age:{$lt:60}}]})
需求:查詢年齡在大於等於40且小於等於60的資料
error : db.student.find({age:{$gte:40},age:{$lte:60}})
正確寫法: db.student.find({age:{$gte:40,$lte:60}})
注意: 以上寫法後面的屬性會覆蓋前面的屬性
$or 或者
格式: db.集合名.find({$or:[{條件1},{條件2}]})
寫法同上,把and換成or即可。
$not 非
格式: db.集合名.find({$not:{條件1}})
3.模糊運算子
格式: db.集合名.find({欄位名:/匹配的資料/})
注意: / / 不需要將引號
需求:查找出名字中包含張字的資料
db.student.find({name:/張/})
/^字元/ 表示以某個字元開始的資料
/字元$/ 表示以某個字元結尾的資料
需求: 查找出姓 張 的資料
db.student.find({name:/^張/})
4.分頁 ---- 關係: limit 值1,值2
limit(number) 表示讀取指點數量的資料 相當於 值2
skip(position) 表示跳到指定位置開始讀資料 注: 位置從 0 開始 相當於值1
db.student.find().skip(1)
db.student.find().limit(1)
需求: 每頁3條資料,獲取3頁資料
db.student.find().skip(6).limit(3)
需求: 每頁m條資料,獲取n頁資料
格式: db.student.find().skip((n-1)*m).limit(m)
5.排序 sort 欄位名 升序/降序
格式: db.student.find().sort({欄位名:1/-1}) 1: 表示升序 -1: 降序
需求: 按照年齡的升序排序
db.student.find().sort({age:1})
6.計算查詢結果的數量
db.student.find().count()