mongoDB的概念
- MongoDB 是由C++語言編寫的煮寡,是一個(gè)基于分布式文件存儲的開源數(shù)據(jù)庫系統(tǒng)。在高負(fù)載的情況下犀呼,添加更多的節(jié)點(diǎn)幸撕,可以保證服務(wù)器性能。
- MongoDB 旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案外臂。
- MongoDB 將數(shù)據(jù)存儲為一個(gè)文檔坐儿,數(shù)據(jù)結(jié)構(gòu)由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象宋光。字段值可以包含其他文檔貌矿,數(shù)組及文檔數(shù)組。
mongoDB的安裝與啟動
- 安裝mongoDB
brew install mongodb
- 新建文件夾 (名字自取) 這里以database
- 啟動mongodb服務(wù)器
mongod --dbpath=文件路徑
- 進(jìn)入服務(wù)器環(huán)境
mongo
- 查看數(shù)據(jù)庫
show dbs
初始數(shù)據(jù)庫的狀態(tài)
mongoDB的操作
操作mongo基礎(chǔ)
下面是數(shù)據(jù)庫與mongoDB的對比圖跃须,構(gòu)成有相似的站叼,也有不同的
- 創(chuàng)建數(shù)據(jù)庫
先use 要創(chuàng)建的數(shù)據(jù)庫名娃兽,如果數(shù)據(jù)庫名已存在菇民,則切換到此數(shù)據(jù)庫中;如不存在投储,則創(chuàng)建數(shù)據(jù)庫
// 創(chuàng)建一個(gè)users數(shù)據(jù)庫
user users
- 創(chuàng)建一個(gè)數(shù)據(jù)庫集合person,并添加數(shù)據(jù)
db.person.insert({name:"張三"第练,age:20})
- 查看當(dāng)前使用的數(shù)據(jù)庫
db
- 刪除數(shù)據(jù)庫
db.dropDatabase()
- 斷開連接
exit
操作集合
- 查看當(dāng)前數(shù)據(jù)庫下有哪些集合
show collections
- 創(chuàng)建集合
db.createCollection(collection_Name)
- 刪除集合
db.collection_Name.drop()
文檔操作
這里以person集合為例
1.insert 添加數(shù)據(jù):
db.COLLECTIONNAME.insert({name:"張三",age:20})
db.person.insert({name:'馬云',age:37})
- save 添加與更新:
如果通過id能找到就是更新,如果找不到就是添加玛荞;
- 添加
db.person.save({name:"李四"})
- 更新
db.person.save({'_id':ObjectId("5a67f5221df8d5687e847094"),name:'王五',age:21}
- update 更新:(默認(rèn)更新符合條件的第一條)
db.COLLECTIONNAME.update({條件},{更新的內(nèi)容},{配置項(xiàng)(如果要更新能夠匹配的多個(gè)選項(xiàng) multi:true)})
下列更新名字叫馬云的年齡為42
db.person.update({name:"馬云"},{$set:{age:42}})
如果表中有多個(gè)馬云娇掏,若想更新所有名字叫馬云的年齡,就需要使用到第三個(gè)參數(shù)multi
db.person.update({name:"馬云"},{$set:{age:18}},{multi:true})
- remove 刪除:(默認(rèn)刪除符合條件的所有數(shù)據(jù))
db.COLLECTIONNAME.remove({name:'張三'},{配置項(xiàng)(可選:justOne)});
刪除名字叫馬云的一條數(shù)據(jù)勋眯,需配置第三個(gè)參數(shù)justOne
db.person.remove({name:'馬云'},{justOne:true})
- find數(shù)據(jù)的查詢
- 所有數(shù)據(jù)的查詢
db.COLLECTIONNAME.find()
db.person.find()
集合person中的字段
- find({條件},{字段})
條件:大于gt 小于lt 大于等于gte 小于等于 lte 不等于 ne婴梧;等于就直接使用冒號
- 第一個(gè)參數(shù):
查詢大于28的數(shù)據(jù)
db.person.find({age:{$gt:28}})
查詢年齡等于30的數(shù)據(jù)
db.person.find({age:30})
- 第二個(gè)參數(shù):字段 如:{name:1,age:1}
查詢年齡大于28的所有名字
db.person.find({age:{$gt:28}},{name:1})
查詢結(jié)果中除了id便只有name一個(gè)字段,第二個(gè)參數(shù)限定需要查詢的字段
- like 關(guān)鍵字
在mongoDB的操作中比數(shù)據(jù)操作更加靈活客蹋,他可以用正則表達(dá)式查詢各種條件的數(shù)據(jù)
查詢以"馬"開頭的數(shù)據(jù) db.COLLECTIONNAME.find({name:/^馬/})
db.person.find({name:/^馬/})
- 并且關(guān)系:直接寫在對象里塞蹭,逗號隔開
查詢數(shù)據(jù)名字是"馬云"并且年齡是48;
db.person.find({name:'馬云',age:40})
- $or 或者關(guān)系
查詢年齡等于48或者28
db.person.find({$or:[{age:30},{age:40}]})
- 分頁:關(guān)鍵字skip和limit
跳過兩條從第三條開始查詢兩條數(shù)據(jù)
db.person.find().skip(2).limit(2)
- 排序: 關(guān)鍵字sort
參數(shù):1代表正序;-1代表倒序
以年齡正序排序
db.person.find().sort({age:1})
- 查詢數(shù)量: 關(guān)鍵字count
db.person.find().count();
上面這些的查詢的命令單個(gè)看起來還挺容易的讶坯,但混合使用還是很容易出錯(cuò)的番电,這就需要大家細(xì)心的去寫了。
最后寫個(gè)簡單的綜合查詢:
查詢所有姓李或者是姓王的;按照年齡倒序排列漱办;只查詢結(jié)果的2條數(shù)據(jù)
db.person.find({$or:[{name:/^李/},{name:/^王/}]}).sort({age:-1}).skip(0).limit(2)
結(jié)束語
MongoDB的擴(kuò)展性好这刷,并且支持多種匯編語言,由于使用JSON形式的存儲娩井,使之更加容易查詢文檔中的對象或數(shù)組暇屋。好用的不要不要的。洞辣。率碾。