標籤:
關於mongoDB的相關知識,讀書筆記,便於自己查閱用,不定期更新(純手打) 《mongoDB權威指南》
一、建立更新和刪除
1.建立
//批量插入一個集合可以節省時間,只用一次Tcp//插入時轉成bson,並且資料不能大於4mbdb.blog.insert({"name":"RedWolf"}) //插入一個文檔 文檔有一個name鍵
var temp={"name":"Dog"} db.blog.insert(temp) //插入一個文檔 文檔有一個name鍵
2.刪除
db.blog.remove({}) //刪除blog中的所有文檔,但不會刪除集合本身以及索引 db.blog.remove({"age":"18"}) //刪除blog中所有age為18的文檔//如果追求速度 刪除整個集合,然後再重新建立索引會比較快 相對於刪除所有文檔db.blog.drop() //未驗證是否真的快很多
3.更新
db.blogs.insert({"name":"joe",age:18,frineds:"tom"})//以下是更新步驟var joe=db.blogs.findOne({"name":"joe"}) //此處不可用find() find返回的是遊標joe.relationship={"friends":"kate"}joe.age=19db.blogs.update({"name":"joe"},joe);//將修改後的文檔進行更新 如果集合中存在多個name為joe的文檔,則會嘗試更新多條,但是joe中的_id是固定的,所以會造成錯誤。更新時需注意唯一性
3.1修改器
一般只需修改文檔中的部分內容,此時採用修改器比較合適(原子性)
//eg1 記錄頁面被訪問次數的文檔,每當被訪問的時候加一 $inc 對之後的鍵加指定值(該值為負可實現減法) 如果鍵不存在則會添加該建共置為指定值db.web.insert({"pageName":"cnblogs","times":1})db.web.update({"pageName":"cnblogs"},{"$inc":{"times":1}})
//eg2 直接修改值 $set 會直接修改 如果修改的鍵不存在,則會添加該鍵共置為指定值db.web.update({"pageName":"cnblogs"},{"$set":{"times":88}})//eg3 修改內嵌值db.blog.update({"name":"joe"},{"$set":{"relationship.friends":"Lin"}})
//eg4 刪除指定鍵 $unset會刪除指定鍵 該例中會刪除age鍵db.blog.update({"name":"joe"},"&unset":{"age":1})
//對數組的操作 $push 會插入到數組的末尾db.web.insert({"name":"test","bin":[1,2,3,4,6]})db.web.update({"name":"test"},{"$push":{bin:5}})db.web.insert({"name":"try","bin":[{"id":1},{"id":2}]})db.web.update({"name":"try"},{"$push":{"bin":{"id":3}}})
//數組操作 $ne配合 $pushdb.web.insert({"name":1,"bin":[1,2,3]});db.web.insert({"name":2,"bin":[1,2,3,4]});db.web.update({"name":{"$ne":1}},{"$push":{"bin":4}})//為name為1的文檔中的bin添加4db.web.update({"bin":{"$ne":4}},{"$push":{"bin":4}}) //若bin中沒有4,則添加4
//addToSet 如果沒有則添加 取代了$ne和$push的組合db.web.update({"name":1},{"$addToSet":{"bin":20}}) //對於name為1的文檔如果bin中沒有20則添加
//$addToSet 配合 $each 添加數組中不同的內容db.web.update({"id":1},{"$addToSet":{"bin":{"$each":[1,2,3,4,5]}}})
//刪除數組中的元素 $popdb.web.update({"id":1},{"$pop":{"bin":1}}) //從數組末尾刪除一個db.web.update({"id":1},{"$pop":{"bin":-1}}) //從數組開頭刪除一個//刪除數組中的元素 $pulldb.web.update({"id":1},{"$pull":{"bin":1}}) //從數組中刪除所有為1的項
//數組的定位操作 $db.web.update({"bin":3},{"$inc":{"bin.$":3}})
// $upsert 有則更新,沒有則根據查詢條件和更新內容添加新文檔 update的第三個參數為true則為upsertdb.web.update({"id":3},{"$push":{"bin":8}},true)
// $save 存在_id使調用upsert 否則調用insertvar x=db.web.findone();x.id=9db.web.save(x)
//更新匹配的多個文檔//正常情況下即使匹配多個也只更新匹配到的第一條,update的第四個參數為true則匹配多條db.web.update("id":{"$ne":100},{"&push":{"bin":100}},false,true) //為所有id不為100的文檔的bin添加100
二、查詢
//用逗號隔開為多個條件 條件1and條件2db.web.find({"id":1,"name":"blog"})
//返回指定的鍵 find函數的第二個參數指定要返回和不需要返回的鍵 1為需要返回 0為不需要返回db.web.find({"id":1},{"id":1,"_id:0"})
// $lt $lte $gt $gte 分別對應 < <= > >=db.web.find({"age":{"$gt":10,"$lt":18}}) //尋找age在(10,18)範圍的文檔
var date=new Datedb.web.find({"datetime":{"$gt":date}})
// $in 某個索引值匹配任意一項 $or 任意一個條件達成db.web.find({"id":{"$in":[1,2,3]}}) //尋找id為 1 2或3 的文檔db.web.find({"$or":[{"id":1},{"age":3}]}) //尋找id為1或年齡為3的文檔
// $mod取餘 $not 取反db.web.find({"id":{"not":{"$mod:[5,1]"}}}) //取id 除5後不餘1的id 如2,3,4,5,7
//Regex /××××××××××/db.web.find({"name":/[0-9]*/}) //尋找名稱為數位文檔
//查詢數組 $all db.web.find({"bin":{"$all":[1,2,3]}}) //尋找bin中包含1,2和3的文檔
mongoDB 讀書筆記(初級命令)