MongoDB基礎操作

更多內(nèi)容歡迎來到博客 :https://imjianjian.github.io

<b>
MongoDB版本:3.4
</b>

查詢文檔

find()

查詢所有

db.user.find({})
db.user.find()

文檔查詢

//查詢name="jianjian"的所有文檔
db.user.find({"user":"jianjian"})

條件查詢

  • $lt 小于
  • $gt 大于
  • $gte 大于等于
  • $lte 小于等于
//查詢年齡小于18的
db.user.find("age":{$lt:"18"})

限制查詢條數(shù)

limit(number)

number為條數(shù)

//查詢條數(shù)限制為10條
db.user.find().limit(10)

排序

sort({key:1})

key為需要排序的字段,升序為1,降序為-1

//按照年齡升序排序
db.user.find().sort({"age":1})

插入文檔

insert()基本語法如下:

db.collection.insert(
   <document or array of documents>,
   {
     writeConcern: <document>,
     ordered: <boolean>
   }
)

單條插入

db.user.insert({"name":"jianjian"})

多條插入

db.user.insert([{"name":"jianjian"},{"name":"dongdong"}])

錯誤的語法

db.user.insert({"age":11},{"age":12})

只有age:11被插入進去,由于接收的插入文檔不是數(shù)組

容易誤導的地方:

db.user.insert([{"name":"jianjian"},{"name":"dongdong"}])

db.user.insert({"name":"jianjian"},{"age":"dongdong"})

db.user.insert({"name":"jianjian","name":"dongdong"})

第一個插入是插入兩個文檔,第二個插入是插入一個文檔,第三個雖然也是一個文檔但是由于鍵重復,所以只有后一個值會被插入age:12

刪除文檔

remove() 方法的基本語法格式如下所示:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }

參數(shù)說明:

  • query :(可選)刪除的文檔的條件。
  • justOne : (可選)如果設為 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(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

參數(shù)說明:

  • query : update的查詢條件,類似sql update查詢內(nèi)where后面的。
  • update : update的對象和一些更新的操作符(如$,$inc...)等,也可以理解為sql update查詢內(nèi)set后面的
    upsert : 可選,這個參數(shù)的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入。
  • multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數(shù)為true,就把按條件查出來多條記錄全部更新。
  • writeConcern :可選,拋出異常的級別。

$set修改符

用于修改鍵的值,如果鍵不存在就增加鍵

//將age=10的數(shù)據(jù)改成15,默認如果age=10的有多條記錄只更新第一條
db.user.update({"name":"li"},{$set:{"age":10}})

//更新多個滿足條件的值,同時如果更新的值不存在就插入更新的值,注意:這里插入的值是20不是30
db.user.update({"age":30},{$set:{"age":20}},{multi:true,upsert:true})

可以省略multi,upsert,這里不能有花括號,但是不建議這樣做
db.user.update({"age":30},{$set:{"age":20}},true,true)

//值更新為數(shù)組
db.user.update({"name":"zhang"},{$set:{"age":[10,
12,14]}},{upsert:true})

//修改為其它的值
db.user.update({"name":"zhang"},{$set:{"age":''}},{upsert:true})
db.user.update({"name":"zhang"},{$set:{"age":null}},{upsert:true})

$inc修改符

用于增加已有鍵的值,如果鍵不存在就創(chuàng)建,只能用于整形、長整型、浮點型。

//將name=zhang的記錄的age鍵+10
db.user.update({"name":"zhang"},{$inc:{"age":10}},{upsert:true})

//將name=zhang的記錄的age鍵-10
db.user.update({"name":"zhang"},{$inc:{"age":-10}},{upsert:true})

$unset修改符

刪除鍵類似關系數(shù)據(jù)庫的刪除字段操作,要區(qū)別$set修改符的將鍵設空或者null值

db.user.update({"name":"zhang"},{$unset:{"age":1}})

$push修改符

如果數(shù)組已經(jīng)存在,“$push”會向已有的數(shù)組末尾加入一個元素,要是沒有就創(chuàng)建一個新的數(shù)組。注意:必須是數(shù)組才能加入新的值

db.user.update({"name":"zhang"},{$push:{"comments":{"email":"abc@qq.com","address":"beijing"}}});

//再插入一條comments
db.user.update({"name":"zhang"},{$push:{"comments":{"mark":"aaa"}}});

$each修改符

向數(shù)組中添加元素

db.axc.insert({"title":1,"list":[1,2,3]})

//向list數(shù)組中添加單個元素
db.axc.update({"title":1},{$push:{"list":4}})

//向list數(shù)組中添加多個元素
db.axc.update({"title":1},{$push:{"list":{$each:[6,7]}}});

$addToSet修改符

往數(shù)組集中插入元素時,如果元素存在就不插入;方法和$push一樣,唯一的區(qū)別就是$push不會判斷重復值,重復也可以插入。$addToSet也可以結合$each一起使用方法和$push一樣可以同時往數(shù)組中插入多個元素并且如果元素存在則不插入。

db.axc.update({"title":1},{$addToSet:{"list":2}})

db.axc.update({"title":1},{$addToSet:{"list":{$each:[2,3,4]}}});

$pull修改符

匹配數(shù)組中的元素將匹配上的元素全部刪除,注意只能對數(shù)組中的元素進行匹配

db.lists.insert({"title":1,"list":[1,2,3]});

//清除list數(shù)組中的元素2
db.lists.update({},{$pull:{"list":2}})

$pop修改符

從數(shù)組的末端或頭刪除一個元素,$pop:{"list":1}:從末尾刪除一個元素;$pop:{"list":-1}:從開頭刪除一個元素

//向數(shù)組list中插入兩個元素
db.lists.update({},{$push:{"list":{$each:[2,4]}}});

//從末尾刪除元素
db.lists.update({},{$pop:{"list":1}});

//從開頭刪除元素
db.lists.update({},{$pop:{"list":-1}});

基于位置的數(shù)組修改方法
可以有兩種方式來定位數(shù)組中的元素:

1.通過下標;數(shù)組的下標都是從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ù)時,查詢可以要花費幾十秒甚至幾分鐘,這對網(wǎng)站的性能是非常致命的。

索引是特殊的數(shù)據(jù)結構,索引存儲在一個易于遍歷讀取的數(shù)據(jù)集合中,索引是對數(shù)據(jù)庫表中一列或多列的值進行排序的一種結構

ensureIndex() 方法

MongoDB使用 ensureIndex() 方法來創(chuàng)建索引。

設置userNo為索引:

db.user.ensureIndex({"userNo":1})
1為指定按升序創(chuàng)建索引,如果你想按降序來創(chuàng)建索引指定為-1即可。

刪除集合

刪除test集合,注意drop后面的括號里面不需要帶花括號

db.test.drop()
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容