摘要:如果我們需要只去查詢存在字段并且字段的值為的記錄,需要配合操作。的對象和一些更新的操作符如等,也可以理解為查詢內(nèi)后面的可選,這個參數(shù)的意思是,如果不存在的記錄,是否插入為插入,默認(rèn)是,不插入。可選,拋出異常的級別。
更多內(nèi)容歡迎來到博客 :https://imjianjian.github.io
MongoDB版本:3.4
find()
查詢所有db.collection.find({}) db.collection.find()文檔查詢
//查詢name="jianjian"的所有文檔 db.collection.find({"collection":"jianjian"})條件操作符
$lt 小于
$gt 大于
$gte 大于等于
$lte 小于等于
$ne 不等于
$all 全包含
$in 包含
$nin 不包含
//查詢年齡小于18的 db.collection.find("age":{$lt:"18"})$all
必須滿足所有值
//可以查詢出來{age:[20,21,22]}但是查詢不出來{age:[20,22,23]},即一定要有20和21. db.collection.find({age:{$all:[20,21]}});$in
這個與$all不一樣,查詢的值在$in給出的范圍之內(nèi)就都可以查出來。
//{age:[20,21,22]},{age:[20,22,23]}都能查出來 db.collection.find({age:{$in:[20,21]}});$exists
判斷key是否存在
判斷age字段是否存在 db.collection.find({age:{$exists:true}});null值的處理
null值處理需要注意的是,不僅僅可以查詢出來某一字段值為null的記錄,還可以查出來不存在某一字段的記錄。
db.collection.find({age:null})
可以查詢出來age為null的記錄,以及沒有age字段的記錄。如果我們需要只去查詢存在age字段并且age字段的值為null的記錄,需要配合exists操作。
db.collection.find({age:{"$in":[null],"$exists":true}});限制查詢條數(shù)
limit(number)
number為條數(shù)
//查詢條數(shù)限制為10條 db.collection.find().limit(10)排序
sort({key:1})
key為需要排序的字段,升序為1,降序為-1
//按照年齡升序排序 db.collection.find().sort({"age":1})跳過記錄
skip()
查詢第10到20條的記錄 db.collection.find().skip(10).limit(10);查詢文檔條數(shù)
count()
age大于25的條數(shù) db.collection.find({age: {$gte: 25}}).count();插入文檔
insert()基本語法如下:
db.collection.insert(單條插入, { writeConcern: , ordered: } )
db.collection.insert({"name":"jianjian"})多條插入
db.collection.insert([{"name":"jianjian"},{"name":"dongdong"}])錯誤的語法
db.collection.insert({"age":11},{"age":12})
只有age:11被插入進(jìn)去,由于接收的插入文檔不是數(shù)組
容易誤導(dǎo)的地方:
db.collection.insert([{"name":"jianjian"},{"name":"dongdong"}]) db.collection.insert({"name":"jianjian"},{"age":"dongdong"}) db.collection.insert({"name":"jianjian","name":"dongdong"})
第一個插入是插入兩個文檔,第二個插入是插入一個文檔,第三個雖然也是一個文檔但是由于鍵重復(fù),所以只有后一個值會被插入age:12
刪除文檔remove() 方法的基本語法格式如下所示:
db.collection.remove(, { justOne: , writeConcern: }
參數(shù)說明:
query :(可選)刪除的文檔的條件。
justOne : (可選)如果設(shè)為 true 或 1,則只刪除一個文檔。
writeConcern :(可選)拋出異常的級別。
刪除num大于100的數(shù)據(jù)db.new.remove({"num":{$gt:100}});刪除new集合所有數(shù)據(jù)
db.new.remove({});刪除num等于100的數(shù)據(jù)
db.new.remove({"num":100})更新文檔
update() 方法用于更新已存在的文檔。語法格式如下:
db.collection.update(, , { upsert: , multi: , writeConcern: } )
參數(shù)說明:
query : update的查詢條件,類似sql update查詢內(nèi)where后面的。
update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內(nèi)set后面的
upsert : 可選,這個參數(shù)的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認(rèn)是false,不插入。
multi : 可選,mongodb 默認(rèn)是false,只更新找到的第一條記錄,如果這個參數(shù)為true,就把按條件查出來多條記錄全部更新。
writeConcern :可選,拋出異常的級別。
$set修改符用于修改鍵的值,如果鍵不存在就增加鍵
//將age=10的數(shù)據(jù)改成15,默認(rèn)如果age=10的有多條記錄只更新第一條 db.collection.update({"name":"li"},{$set:{"age":10}}) //更新多個滿足條件的值,同時如果更新的值不存在就插入更新的值,注意:這里插入的值是20不是30 db.collection.update({"age":30},{$set:{"age":20}},{multi:true,upsert:true}) 可以省略multi,upsert,這里不能有花括號,但是不建議這樣做 db.collection.update({"age":30},{$set:{"age":20}},true,true) //值更新為數(shù)組 db.collection.update({"name":"zhang"},{$set:{"age":[10, 12,14]}},{upsert:true}) //修改為其它的值 db.collection.update({"name":"zhang"},{$set:{"age":""}},{upsert:true}) db.collection.update({"name":"zhang"},{$set:{"age":null}},{upsert:true})$inc修改符
用于增加已有鍵的值,如果鍵不存在就創(chuàng)建,只能用于整形、長整型、浮點(diǎn)型。
//將name=zhang的記錄的age鍵+10 db.collection.update({"name":"zhang"},{$inc:{"age":10}},{upsert:true}) //將name=zhang的記錄的age鍵-10 db.collection.update({"name":"zhang"},{$inc:{"age":-10}},{upsert:true})$unset修改符
刪除鍵類似關(guān)系數(shù)據(jù)庫的刪除字段操作,要區(qū)別$set修改符的將鍵設(shè)空或者null值
db.collection.update({"name":"zhang"},{$unset:{"age":1}})$push修改符
如果數(shù)組已經(jīng)存在,“$push”會向已有的數(shù)組末尾加入一個元素,要是沒有就創(chuàng)建一個新的數(shù)組。注意:必須是數(shù)組才能加入新的值
db.collection.update({"name":"zhang"},{$push:{"comments":{"email":"abc@qq.com","address":"beijing"}}}); //再插入一條comments db.collection.update({"name":"zhang"},{$push:{"comments":{"mark":"aaa"}}});$each修改符
向數(shù)組中添加元素
db.collection.insert({"title":1,"list":[1,2,3]}) //向list數(shù)組中添加單個元素 db.collection.update({"title":1},{$push:{"list":4}}) //向list數(shù)組中添加多個元素 db.collection.update({"title":1},{$push:{"list":{$each:[6,7]}}});$addToSet修改符
往數(shù)組集中插入元素時,如果元素存在就不插入;方法和$push一樣,唯一的區(qū)別就是$push不會判斷重復(fù)值,重復(fù)也可以插入。$addToSet也可以結(jié)合$each一起使用方法和$push一樣可以同時往數(shù)組中插入多個元素并且如果元素存在則不插入。
db.collection.update({"title":1},{$addToSet:{"list":2}}) db.collection.update({"title":1},{$addToSet:{"list":{$each:[2,3,4]}}});$pull修改符
匹配數(shù)組中的元素將匹配上的元素全部刪除,注意只能對數(shù)組中的元素進(jìn)行匹配
db.collection.insert({"title":1,"list":[1,2,3]}); //清除list數(shù)組中的元素2 db.collection.update({},{$pull:{"list":2}})$pop修改符
從數(shù)組的末端或頭刪除一個元素,$pop:{"list":1}:從末尾刪除一個元素;$pop:{"list":-1}:從開頭刪除一個元素
//向數(shù)組list中插入兩個元素 db.collection.update({},{$push:{"list":{$each:[2,4]}}}); //從末尾刪除元素 db.collection.update({},{$pop:{"list":1}}); //從開頭刪除元素 db.collection.update({},{$pop:{"list":-1}});
基于位置的數(shù)組修改方法
可以有兩種方式來定位數(shù)組中的元素:
1.通過下標(biāo);數(shù)組的下標(biāo)都是從0開始。
2.通過$定位操作符,
db.comment.insert({"title":1,"comments":[{"comment":"a","author":"chen","age":10},{"comment":"b","author":"wang","age":30},{"comment":"c","author":"zhang","age":40}]});
//將數(shù)組中的第一個列表的age值改成20 //方法1: db.comment.update({},{$set:{"comments.0.age":20}}); //方法2: db.comment.update({"comments.author":"chen"},{$set:{"comments.$.age":20}});索引
索引通常能夠極大的提高查詢的效率,如果沒有索引,MongoDB在讀取數(shù)據(jù)時必須掃描集合中的每個文件并選取那些符合查詢條件的記錄。
這種掃描全集合的查詢效率是非常低的,特別在處理大量的數(shù)據(jù)時,查詢可以要花費(fèi)幾十秒甚至幾分鐘,這對網(wǎng)站的性能是非常致命的。
索引是特殊的數(shù)據(jù)結(jié)構(gòu),索引存儲在一個易于遍歷讀取的數(shù)據(jù)集合中,索引是對數(shù)據(jù)庫表中一列或多列的值進(jìn)行排序的一種結(jié)構(gòu)
ensureIndex() 方法MongoDB使用 ensureIndex() 方法來創(chuàng)建索引。
設(shè)置No為索引:
db.collection.ensureIndex({"No":1}) 1為指定按升序創(chuàng)建索引,如果你想按降序來創(chuàng)建索引指定為-1即可。刪除集合
刪除test集合,注意drop后面的括號里面不需要帶花括號
db.test.drop()
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19181.html
摘要:如將構(gòu)造函數(shù)作為函數(shù)進(jìn)行調(diào)用即不包括的方式,返回的是日期的字符串表示,而非日期對象。如果不注意這一點(diǎn),沒有始終使用日期構(gòu)造函數(shù),將得到一堆混亂的日期對象和日期的字符串。關(guān)于日期類的完整解釋,以及構(gòu)造函數(shù)的參數(shù)格式,參見規(guī)范節(jié)。 上一篇文章:MongoDB指南---2、MongoDB基礎(chǔ)知識-文檔、集合、數(shù)據(jù)庫、客戶端下一篇文章:MongoDB指南---4、MongoDB基礎(chǔ)知識-使用M...
摘要:如將構(gòu)造函數(shù)作為函數(shù)進(jìn)行調(diào)用即不包括的方式,返回的是日期的字符串表示,而非日期對象。如果不注意這一點(diǎn),沒有始終使用日期構(gòu)造函數(shù),將得到一堆混亂的日期對象和日期的字符串。關(guān)于日期類的完整解釋,以及構(gòu)造函數(shù)的參數(shù)格式,參見規(guī)范節(jié)。 上一篇文章:MongoDB指南---2、MongoDB基礎(chǔ)知識-文檔、集合、數(shù)據(jù)庫、客戶端下一篇文章:MongoDB指南---4、MongoDB基礎(chǔ)知識-使用M...
摘要:進(jìn)入數(shù)據(jù)庫,然后查看擁有的集合查看當(dāng)前操作的數(shù)據(jù)庫,以及數(shù)據(jù)庫版本,連接及端口號以下部分為創(chuàng)建數(shù)據(jù)庫,我們剛創(chuàng)建的數(shù)據(jù)庫并不在數(shù)據(jù)庫的列表中,要顯示它,我們需要向數(shù)據(jù)庫插入一些數(shù)據(jù)。 跟著上一節(jié),我們簡單了解了下,什么是mongoDB? 這一節(jié),我們簡單的了解下mongodb的存儲結(jié)構(gòu)以及基礎(chǔ)的shell命令。 一、mongodb的存儲結(jié)構(gòu) 接觸mongodb之前,我們使用的都是關(guān)系型...
摘要:布爾類型,表示文檔是否按照有序或者無序插入,默認(rèn)是返回參數(shù)返回了含有操作狀態(tài)的對象插入文檔成功返回如下對象字段指明了插入文檔的總數(shù)如果該操作遇到了錯誤對象將包含該錯誤信息例子四其它可以向集合中添加文檔的方法和選項一起使用的。 上一節(jié)介紹了MongoDB的基本的命令,以及結(jié)構(gòu)的了解,這一節(jié)的主題是介紹一下MongoDB的插入文檔的操作的基礎(chǔ)命令的使用,MongoDB當(dāng)中文檔的數(shù)據(jù)結(jié)構(gòu)和j...
摘要:上一篇文章指南簡介下一篇文章指南基礎(chǔ)知識數(shù)據(jù)類型非常強(qiáng)大但很容易上手。把同種類型的文檔放在一個集合里,數(shù)據(jù)會更加集中。命名集合使用名稱進(jìn)行標(biāo)識。集合名不能是空字符串。簡單起見,數(shù)據(jù)庫名應(yīng)全部小寫。 上一篇文章:MongoDB指南---1、MongoDB簡介下一篇文章:MongoDB指南---3、MongoDB基礎(chǔ)知識-數(shù)據(jù)類型 MongoDB非常強(qiáng)大但很容易上手。本章會介紹一些Mon...
摘要:上一篇文章指南簡介下一篇文章指南基礎(chǔ)知識數(shù)據(jù)類型非常強(qiáng)大但很容易上手。把同種類型的文檔放在一個集合里,數(shù)據(jù)會更加集中。命名集合使用名稱進(jìn)行標(biāo)識。集合名不能是空字符串。簡單起見,數(shù)據(jù)庫名應(yīng)全部小寫。 上一篇文章:MongoDB指南---1、MongoDB簡介下一篇文章:MongoDB指南---3、MongoDB基礎(chǔ)知識-數(shù)據(jù)類型 MongoDB非常強(qiáng)大但很容易上手。本章會介紹一些Mon...
閱讀 2050·2023-04-26 02:23
閱讀 1792·2021-09-03 10:30
閱讀 1357·2019-08-30 15:43
閱讀 1195·2019-08-29 16:29
閱讀 539·2019-08-29 12:28
閱讀 2338·2019-08-26 12:13
閱讀 2190·2019-08-26 12:01
閱讀 2404·2019-08-26 11:56