mongo數(shù)據(jù)庫筆記
1、創(chuàng)建集合
集合的名字,參數(shù)
db.createCollection(name, options)
2、查看集合
show collections
3、刪除集合
db.集合名字.drop()
4、與mysql區(qū)別
mysql? mongo
表? ? ? 集合
行? ? ? 文檔
列? ? ? 字段
表? ? ? 聯(lián)合嵌入文檔
主鍵? ? ? 主鍵 (MongoDB 提供了 key 為 _id )
5、插入文檔(insert方法)
insert方法: 不能插入相同的數(shù)據(jù)
db.集合名字.insert(里面是集合的名字)
eg:插入單個(gè)文檔
db.coll_stu.insert({
"name":"小美",
"age":19,
"desc":"我是小美,我最愛錢",
"hobby":["逛街","抽煙"]
})
插入多個(gè)文檔
db.coll_stu.insert([
{
"name":"小紅",
"age":21,
"desc":"我是小紅,我最愛你",
"hobby":["蹦迪","花錢"]
},
{
"name":"小美",
"age":19,
"desc":"我是小美,我最愛錢",
"hobby":["逛街","抽煙"]
}])
插入文檔(save方法)
save方法:當(dāng)我們插入時(shí),如果數(shù)據(jù)已經(jīng)存在,會有更新的意思
不存在就會往里面插入數(shù)據(jù)
db.coll_stu.save({
"name":"小美",
"age":19,
"desc":"我是小美,我最愛錢",
"hobby":["逛街","抽煙"]
})
6、查詢文檔
db.集合名字.find()
以格式化的方式查詢
db.集合名字.find().pretty()
find()里面加條件
想要查詢名字為小紅的人
db.coll_stu.find({"name":"小紅"})
查詢年齡小于20的
db.coll_stu.find({"age":{$lt:20}})
小于等于 $lte
大于 $gt? 大于等于$gte
不等于 $ne
And是查多條件并且的關(guān)系
$and也可以省略,直接傳入鍵值對,以逗號分隔
查詢小紅并且年齡為二十一
db.coll_stu.find({"name":"小紅","age":21})
or 表示或者
名字為小紅的人或者年齡為19的人
db.coll_stu.find({$or:[{"name":"小紅"},{"age":19}]})
And 和or連用
年齡大于二十八歲的或者名字為小紅或者描述為這個(gè)的人
db.coll_stu.find({"age":{"$gte":21},$or:[{"name":"小紅"},{"desc":"我是小美,我最愛錢"}]})
7、更新文檔(update),(save也可以更新)
區(qū)別:save更新數(shù)據(jù)結(jié)構(gòu)體,update更新數(shù)據(jù)
db.集合名字.update(query,update,
{
upsert: boolean,
? ? multi: boolean,
}
)
query:更新的條件
update:更新的內(nèi)容,指的哪些字段
upsert:如果更新的數(shù)據(jù)不存在,你是否要插入進(jìn)去,true為插入,默認(rèn)是false,不插入。
multi:默認(rèn)是false,只更新找到的第一條記錄
把名字為小美的年齡改成58(只修改找到它的第一條數(shù)據(jù))
例子:db.coll_stu.update({"name":"小美"},{"$set":{"age":58}})
這個(gè)就是修改找到它的所有數(shù)據(jù)
db.coll_stu.update({"name":"小美"},{"$set":{"age":58}},{"multi":true})
8、刪除文檔
db.collection.remove(
query
{
? ? justOne: <boolean>,
}
)
justOne是否刪除多個(gè),True刪除一個(gè),F(xiàn)alse刪除多個(gè)
查詢多個(gè)刪除多個(gè)
列子:db.coll_stu.remove({"name":"小美"})
加上{"justOne": true,},查詢多個(gè),刪除一個(gè)
db.coll_stu.remove({"name":"小美"},{"justOne":true})
9、投影:可以隱藏不想要的字段
想顯示字段的話就把KEY置為1,不想顯示置為0
db.集合名字.find({}, {KEY:1})
例子:只看姓名
db.coll_stu.find({},{"name":1})
10、
limit() 方法 和? skip() 方法
可以做分頁
limit() 方法
db.集合名字.find().limit(NUMBER)
列子:至少返回幾條數(shù)據(jù)
db.coll_stu.find().limit(2)
skip()方法,
db.集合名字.find().skip().limit(NUMBER)
例子:從第二條開始查詢(把前一條過濾,不看第一條)
db.coll_stu.find().skip(1).limit(2)
11、排序
1用于升序,-1用于降序
db.集合名字.find().sort({KEY:1})
例子:把年齡按照升序排
db.coll_stu.find().sort({"age":1})
先按照第一個(gè)字段排序,當(dāng)?shù)谝粋€(gè)字段一樣的時(shí)候按照第二個(gè)字段排序
db.coll_stu.find().sort({"name":-1,"age":-1})
12、聚合
可以對我們查詢到的數(shù)據(jù)進(jìn)行分組
db.集合名字.aggregate(AGGREGATE_OPERATION)
例子:按照name來分組,? ? ? ? ? ? ? ? ? ? ? 根據(jù)年齡字段來求和
db.coll_stu.aggregate({$group:{_id:"$_id",num:{$sum:"$age"}}})
根據(jù)名字分組求年齡的和
db.coll_stu.aggregate({$group:{_id:"$name",num:{$sum:"$age"}}})
根據(jù)名字分組求年齡平均值
db.coll_stu.aggregate({$group:{_id:"$name",num:{$avg:"$age"}}})
求最小值
db.coll_stu.aggregate({$group:{_id:"$name",num:{$min:"$age"}}})
取最大值
db.coll_stu.aggregate({$group:{_id:"$name",num:{$max:"$age"}}})
將某個(gè)字段的值作為數(shù)組插入
db.coll_stu.aggregate({$group:{_id:"$name",num:{$push:"$age"}}})
加入到集合當(dāng)中,但字段不重復(fù)
db.coll_stu.aggregate({$group:{_id:"$name",num:{$addToSet:"$age"}}})
13、管道
輸入一些條件,讓滿足條件的輸出來在進(jìn)行一些操作
$group:將集合中的文檔分組,可用于統(tǒng)計(jì)結(jié)果
$match:用于過濾數(shù)據(jù),只輸出符合條件的文檔。
db.coll_stu.aggregate({$match:{"hobby":["逛街","抽煙"]}},
{$group:{_id:"$_id",num:{$sum:"$age"}}})
過濾大于19的
db.coll_stu.aggregate({$match:{"age":{"$gt":19}}})
大小比較(返回的值? 大的返回1,小的返回-1,相等的返回0)
db.coll_stu.aggregate({$project:{"age":{"$cmp":["$age",19]}}})
大于比較(返回的值是大是True和小是False)
db.coll_stu.aggregate({$project:{"age":{"$gt":["$age",19]}}})
14、索引? (根據(jù)業(yè)務(wù)需求選擇哪些字段創(chuàng)建索引)
可以讓我們查詢的速度更快,1表示按升序創(chuàng)建索引,-1表示降序。
查詢索引
db.coll_stu.getIndexes()
創(chuàng)建索引? (后臺創(chuàng)建索引需要加{"background":true})
db.集合名字.ensureIndex()
根據(jù)名字創(chuàng)建索引
db.coll_stu.ensureIndex({"name":1})
刪除全部索引
db.coll_stu.dropIndexes()
刪除選定的索引
db.coll_stu.dropIndex("name_1")
查看索引大小
db.coll_stu.totalIndexSize()
16、備份數(shù)據(jù)
可以把整個(gè)庫備份,也可以把某個(gè)集合備份到某個(gè)地方
備份整個(gè)數(shù)據(jù)庫? ? ? ? ? ? ? ? ? ? ? ? (備份的路徑)
mongodump -h host:port -d 庫的名字 -o dbdirectory
例子:mongodump -h 127.0.0.1:27017 -d test1 -o /User/y3560/桌面
備份數(shù)據(jù)庫中的某個(gè)集合
mongodump -h host:port --collection 集合名字 -d 庫的名字 -o dbdirectory
例子:mongodump -h 127.0.0.0:27017 --collection coll-stu -d test1 -o
恢復(fù)數(shù)據(jù)
mongorestore -h hostname:port -d 庫的名字 path
例子:mongorestore -h 127.0.0.1:27017 -d test1 /User/y3560/桌面/test1