標籤:

mongodb學習資料整理

2017.6.9今天重新了看了別人寫的關於mongodb的資料整理,之前也用過mongdb,每次學習都能夠看到新的有趣的東西。

1.CRUD基本操作

1.1 insert 插入操作

常見的插入操作也就兩種形式存在:「單條插入」和「批量插入」;其實mongodb是沒有批量插入的操作的,但是mongodb的shell有個很強大的很牛逼的功能,就是tmd支持js腳本啊。

原來我插入數據都是這樣的:

有了js的語法支持,那麼我就可以這麼玩了

如果是批量插入,對不起你只能用for循環來做,寫的循環也很簡單的,看示例(這個裡面insert和save都是可以的,其實現在的版本看官網的只有insert方法了,它不僅可以插入單個文檔也可以是個數組)

1.2 remove 刪除操作

比如我要刪一條信息,這樣寫db.getCollection(PID).remove({"_id" : ObjectId("593a2439bee1806d3a646590")})//"PID是集合名字",這裡直接刪掉了id是這個的所有數據,如果是remove({ }) 那麼刪掉的就是全部的數據。

1.3 update 更新數據

db.getCollection(PID).update({"modelName" : "DB"},{$set:{ "typeFromQR" : "yes"}})

它會先去找"modelName" : "DB"的數據,如果這樣寫只能把第一條改了,如果有很多這樣的數據,你都想改下,那麼需要填寫可選參數。

  • upsert : 可選,這個參數的意思是,如果不存在update的記錄,是否插入objNew,true為插入,默認是false,不插入。
  • multi : 可選,mongodb 默認是false,只更新找到的第一條記錄,如果這個參數為true,就把按條件查出來多條記錄全部更新。

$set 可以被以下替換:

1. $inc 值自增:比如{$inc:{age:10}},age的值會這個數據上增加10

2. $mul 值做乘法:只對數字有效

3. $rename 更改鍵: {$rename:{ age : age_value }} 將 age 鍵變成 age_value

4. $setOnInsert 設置更新時添加更新欄位,個人覺得有點雞肋這個功能

5. $set 更改value值

6. $unset 去掉某個欄位 {$unset:{ "modelName" : "DB" }}//給個ya

7. $min 更改比鍵對應值小的記錄:{ $min: { <field1>: <value1>} }

8. $max 更改比鍵對應值大的記錄:{ $max: { <field1>: <value1>} }

9 $currentDate 更改時間類的值到當前時間:{$currentDate:{ "CreateAt" : true}}

如果對鍵值對的value是數組,那麼用到的東西就是這麼做的,其實不顯麻煩用$set 就能搞定,但是有了這些對數組的操作還是很方便的,尤其是你的value數組很大,這個$set就是個很費的東西已經不能滿足你了,用$push,他又三個屬性可以定義

$each 這個用來寫多個數組中要添加的值得$sort 進行排序 -1 倒序 1 正敘

$slice 限制排序的顯示的個數

$position 添加到數組中的位置

來給個例子:就明白了db.students.update(

db.getCollection(student).update( { _id: 5 }, { $push: { data: { //修改的數組的那個key $each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ],//添加的數據,這個要$each要寫到第一個 $sort: { score: -1 },//倒敘顯示 $position : 1,//添加到第二個位置 $slice: 3 //排序後只顯示前三個 } } })

1.4 find查詢操作

玩查詢玩的比較多真的是些邏輯查詢,比如大小等,好來說一說這個東西

1. 比較類的: $gt(greater than),$gte, $lt(less then ), $lte, $ne(no equal) ,$in,$nin(不在某個數組中)這樣知道英語意思比較好記些,他們的使用方法都是一樣的,給個例子:

db.inventory.find( { qty: { $gt: 20 } } )

2. 邏輯類:$or,$and,$not,$nor

{ $or: [ { <expression1> }, { <expression2> }, , { <expressionN> } ] }//符合其中一個表達式就被選出來;如果是$and 那麼不寫也是可以的{age:20,name:"tom"}//這樣就會選出來符合這兩個條件的記錄

$not:不滿足條件,其實這個東西也很有用的,比如讓在20w條數據中選出不滿足某個條件的或者正麵條件很少,那麼$not 還是很cool的

$nor :一看這個就是不或者,我腦子有點懵,不或者我tmd剛開始真的沒有反應過來這個邏輯幹嘛的,有什麼用,確實這個邏輯真的很雞肋,這個東西就是$and

3. 如果我想知道某個欄位是否存在那麼我就可以用$exitsts來做

find({mykey:{$exists : true}})

4. 如果value是個數組,我想通過數組的大小來過濾數據,比如我想找到某個value的數組的長度是5的,那麼我就可以使用$size:

find( { myarr : { $size :5 } } ) // 這個5其實也可以在加個$gt的條件。

5. 地理位置類geospatial:

mongodb有個很厲害的功能,就是這個地圖

6. $where 正則表達式

這個有兩個鏈接是關於這塊的,大家可以看下,寫的比我好

8天學通MongoDB--第八天 驅動實踐

官方文檔:$text - MongoDB Manual 3.4

推薦閱讀:

如何從MongoDB遷移到MySQL?
MongoDB 存儲引擎 mongorocks 原理解析
Node.js如何應對內存泄露?
怎樣學 MongoDB?
從零開始搭建MongoDB資料庫服務

TAG:MongoDB |