mongoDB常用
登陸{本地的話直接mongo,如果是docker直接就這樣docker exec -it 2d71a13e3128 mongo或者直接這樣 mongo 127.0.0.1:27017
}
退出是 {exit
}database級(jí)操作{查看服務(wù)器上的數(shù)據(jù)庫{show dbs}切換數(shù)據(jù)庫 {use data}查看所有集合{show collections}創(chuàng)建數(shù)據(jù)庫 {mongo中創(chuàng)建數(shù)據(jù)庫采用的也是use命令,如果use后面跟的數(shù)據(jù)庫名不存在,那么mongo將會(huì)新建該數(shù)據(jù)庫。不過,實(shí)際上只執(zhí)行use命令后,mongo是不會(huì)新建該數(shù)據(jù)庫的,直到你像該數(shù)據(jù)庫中插入了數(shù)據(jù)。use test2 db.hello.insert({"name":"testdb"}) 該操作會(huì)在test2數(shù)據(jù)庫中新建一個(gè)hello集合,并在其中插入一條記錄}查詢{db.getCollection('數(shù)據(jù)集合').find({條件})如果想格式化輸出,可以直接后面追加.pretty()}刪除當(dāng)前數(shù)據(jù)庫 { db.dropDatabase() **/在主服務(wù)器上操作的時(shí)候要慎重}查看當(dāng)前數(shù)據(jù)庫{db}
}collection級(jí)操作
{新建collection{db.createCollection("Hello") [直接向一個(gè)不存在的Collection里寫一條數(shù)據(jù),會(huì)默認(rèn)直接創(chuàng)建這個(gè)Collection]}刪除collectio{db.Hello.drop()}重命名{db.hello2.renameCollection("HELLO")} 查看當(dāng)前數(shù)據(jù)庫中的所有collection{ show collections}建立索引在HELLO集合上,建立對(duì)ID字段的索引,1代表升序。{db.HELLO.ensureIndex({ID:1})}
}Record級(jí)的操作
{插入{向A集合中插入兩條記錄{db.A.insert({'name':'Gal Gadot','gender':'female','age':28,'salary':11000}) db.A.insert({'name':'Mikie Hara','gender':'female','age':26,'salary':7000}) } 同樣也可以用save完成類似的插入操作 {db.A.save({'name':'Wentworth Earl Miller','gender':'male','age':41, 'salary':33000})}}查找{查找A集合中的所有記錄{db.A.find()}Exact Equa:查找集合中的符合條件的記錄{單一條件:查詢age為了28的數(shù)據(jù). db.A.find({'age':28})}Great Than:大于{查詢salary大于10000的數(shù)據(jù) db.A.find({salary:{$gt:10000}}) }Fuzzy Match:包含{查詢name中包含'l'的數(shù)據(jù) db.A.find({name:/l/}) 查詢name以G打頭的數(shù)據(jù) db.A.find({name:/^G/})}查找條件是某個(gè)字段是否存在{查找A集合中存在ID字段的{db.A.find({ID:{$exists:true}})}}多條件"與"{查詢age小于30,salary大于10000的數(shù)據(jù)db.A.find({age:{$lt:30},salary:{$gt:10000}}) }多條件“或”{查詢age小于30,或者salary大于10000的記錄 db.A.find({$or:[{salary:{$gt:10000}},{age:{$lt:30}}]}) }查詢第一條記錄 findOne(){返回上面的那個(gè)例子的第一條db.A.findOne({$or:[{salary:{$gt:10000}},{age:{$lt:30}}]}) }查詢記錄的指定字段{只顯示name字段(沒有name的只顯示_id,有的同時(shí)顯示_id和name) db.A.find({},{name:1})}查詢指定字段的數(shù)據(jù),并去重{查詢gender字段的數(shù)據(jù),并去掉重復(fù)數(shù)據(jù) db.A.distinct('gender')}對(duì)查詢結(jié)果集的操作{Pretty Print {Mongo里面有兩個(gè)格式化輸出方法{db.collection.pretty()db.collection.forEach(printjson)}指定結(jié)果集顯示的條目{顯示結(jié)果集中的前3條記錄{db.A.find().limit(3)}查詢第2條以后的所有數(shù)據(jù)(跳過){db.A.find().skip(2)}對(duì)結(jié)果集排序{按照salary字段進(jìn)行升序或者降序排序,如果沒有salary字段的話,就默認(rèn)為最小,比負(fù)數(shù)還小,就當(dāng)他是無窮小。db.A.find().sort({salary:1})db.A.find().sort({salary:-1})}輸出結(jié)果條數(shù){db.A.find().count()}刪除數(shù)據(jù){刪除集合里所有數(shù)據(jù) db.A.remove({})刪除定義了y字段的數(shù)據(jù) db.test.remove({y:{$exists:true}})也可以只刪除固定條數(shù)db.test.remove({x:{$exists:true}},1)tip:db.collection.remove是刪除了集合中所有的記錄,原有的索引等信息還在,而db.collection.drop()是把整個(gè)集合都刪除掉(包括索引)}}更新操作{db.collection.update(criteria, objNew, upsert, multi )criteria:update的查詢條件,類似sql update查詢內(nèi)where后面的objNew:update的對(duì)象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內(nèi)set后面的。upsert : 如果不存在update的記錄,是否插入objNew,true為插入,默認(rèn)是false,不插入。multi : mongodb默認(rèn)是false,只更新找到的第一條記錄,如果這個(gè)參數(shù)為true,就把按條件查出來多條記錄全部更新 例子{db.test.update({x:'x'},{$set:{x:'2'}},false,false) 把集合test中x='x'的中的x改成‘2’,如果沒有找到就不該,并且如果找到多條,只改動(dòng)第一條db.test.update({x:'x'},{$set:{x:'2'}},false,true) 跟上面的區(qū)別是如果找到多條,那么全都改動(dòng)。db.test.update({x:'x'},{$set:{w:'2'}},true,true) 跟上一條的區(qū)別是,如果沒查到x:'x'那么久單獨(dú)創(chuàng)建一條記錄,如果查到了x:'x'但是沒有w這個(gè)字段,那么就創(chuàng)建這個(gè)字段。同時(shí)如果條件是不等式那樣的條件,那么當(dāng)創(chuàng)建新的記錄的時(shí)候,不會(huì)出現(xiàn)條件字段。只會(huì)出現(xiàn)后面的設(shè)置的字段。比如db.test.update({w:'x'},{$set:{q:'2'}},true,true) 如果不存在w這個(gè)字段,則是創(chuàng)建新的記錄 {w:'x',q:'2'},而db.test.update({w:{$lt:30}},{$set:{q:'2'}},true,true) 如果不存在w字段,那么創(chuàng)建新的一條數(shù)據(jù){q:'2'}其中是沒有w字段的。} }
}
$gt:大于
$lt:小于
$gte:大于或等于
$lte:小于或等于
不等于 $ne
這里還有一篇其他小伙伴整理的
https://blog.csdn.net/AlbertFly/article/details/83001012
mongodb中的insert和save的區(qū)別
https://blog.csdn.net/qq_38603247/article/details/82633745
官方文檔
https://docs.mongodb.com/manual/storage/
總結(jié)
- 上一篇: 9.逆向-函数调用约定
- 下一篇: nodejs-安装/helloworld