MongoDB
1.認識
1.簡介
將數(shù)據(jù)存為一個文檔唧垦,數(shù)據(jù)結構鍵值對的形式
mongo文檔類似于json對象
{
name: "xinlan", <---filed:value
age: 26, <---
filed:value
hobby: ['basketball', 'meizi'] <---filed:value
}
2.數(shù)據(jù)模型
基本概率 文檔鳞青,集合窄绒,數(shù)據(jù)庫
關系型數(shù)據(jù)庫 mongo
數(shù)據(jù)庫 數(shù)據(jù)庫
表 集合
行 文檔
3.命令行 MondoDB 的進入和退出
1.進入命令: mongo
2.退出:exit
2.庫,集合操作
1.庫級操作
1.顯示所有的庫:show dbs #沒有數(shù)據(jù)的庫不顯示
2.顯示當前庫:db 默認進入test
3.切換/創(chuàng)建數(shù)據(jù)庫:use 數(shù)據(jù)庫名 # 不存在則創(chuàng)建
4.刪除庫:db.dropDatabase() # 刪除當前庫
***** 數(shù)據(jù)庫只有插入了內容之后才會真正創(chuàng)建
2.集合操作
1.顯示當前數(shù)據(jù)庫的所有的集合:show collections
2.創(chuàng)建集合:db.createCollection(name) #也可以在插入時直接使用新集合db.集
合名.insert({k:v,k:v})
3.刪除集合:db.集合名字.drop()
***** 創(chuàng)建集合后要插入一個文檔(記錄)坤检,集合才會真正的創(chuàng)建
*****命令大小寫敏感
3.文檔(數(shù)據(jù))的操作
**每一條數(shù)據(jù)叹谁,就是一個document饲梭,就是一條json
crud操作
1.添加文檔
1.添加單條 db.collection_name.insert(document)
# 添加文檔時,如果不指定_id參數(shù)焰檩,mongodb會為文檔分配一個
# 唯一的objectid
# 案例:student是集合名憔涉,不存在就自動創(chuàng)建集合并插入文檔
db.student.insert({
name: '張三',
age: 18,
sex: '男'
})
2.添加多條 db.collection_name.insertMany([doc1, doc2,..])
# 案例
db.student.insertMany([
{_id: 1, name:'李四', age: 16},
{_id: 2, name:'王五', age: 19}
])
**** 數(shù)據(jù)是可以重復的,_id不能重復析苫,是唯一的
2.查詢
語法:
db.collection_name.find(query, projection)
db.collection_name.find({query},{顯示的字段})
query :可選监氢,使用查詢操作符指定查詢條件
projection :可選,使用投影操作符指定返回的鍵藤违。查詢時返回文檔中所
有鍵值, 只需省略該參數(shù)即可(默認省略)纵揍。
1.查看集合中的所有數(shù)據(jù):db.collection_name.find()
2.格式化輸出:db.collection_name.find().pretty()
3.查看滿足條件的數(shù)據(jù):db.collection_name.find({_id: 1})
4.projection參數(shù)的用法(指定顿乒,需要顯示的字段)
如果不指定,則默認返回所有的鍵
格式如下泽谨,有兩種模式
# 1.指定返回的鍵,只顯示1的鍵,query為查詢條件
db.collection_name.find(query, {name:1, age:1})
# 2.指定不返回的鍵,不顯示0的鍵
db.collection_name.find(query, {name:0, age:0})
***** 要么都是1要么都是0璧榄,不能混用
*****_id鍵默認返回,需要主動的指定_id:0才會隱藏
如果不想指定查詢條件query吧雹,可以用{}代替骨杂,但是需要指定projection
命令格式db.集合名.find({查詢笨拙},{顯示的字段})
, 例如:db.student.find({}, {_id:0}) # 查詢所有數(shù)據(jù),不顯示_id
5.條件
1.大于 gt:18}})
2.大于等于 gte:18}})
3.小于 lt:18}})
4.小于等于 lte:18}})
5.不等于 ne:18}})
6.邏輯運算
1.and:[codition, codition]})
# 查詢年齡大于18的男學生
db.student.find({gt:18}},{sex: '男'}]})
2.or:[codition, codition]})
7.排序:sort({key:1/-1}) 表示通過字段key進行排序雄卷,-1代表倒序
# 按照年齡從大到小排序
db.student.find().sort({age:-1})
8.limit(int num)
# 獲取三條數(shù)據(jù)
db.student.find().limit(3)
9.skip(int num) 代表跳過num條數(shù)據(jù) 方法的默認參數(shù)為0 單獨使用
# 跳過第一條
db.student.find().skip(1)
# 跳過第一條搓蚪,取后面的3條
db.student.find().limit(3).skip(1)
3.刪除
1.刪除集合中的所有文檔:db.collection_name.remove({})
2.刪除滿足條件的所有文檔:db.collection_name.remove(conditon)
db.student.remove({_id: 1})
3.刪除滿足條件的第一條文檔:db.collection_name.remove(conditon,
{justOne:true})
4.修改
1.全文檔替換 ( 不用,危險)
db.collection_name.update(codition, doc1)
#將id為1的文檔,替換成{'name':'test'},如果有多個key,只update(1個
key,其他key會消失)
db.student.update({_id:1}, {'name':'test'})
2.指定字段修改 db.collection_name.update(condition, {$set:{age:100}})
1.修改找到的第一條:只會修改找到的第一條
# 查找 年齡等于18的學生丁鹉,并修改第一個
db.student.update({'age':18},{$set:{sex: '男'}})
2.修改符合條件的所有文檔 加上一個參數(shù) {multi:true}
db.student.update({'age':18},{$set:{sex: '男'}},{multi:true})