1月16日学习内容整理:存储库MongoDB之文档的增删改查操作补充
生活随笔
收集整理的這篇文章主要介紹了
1月16日学习内容整理:存储库MongoDB之文档的增删改查操作补充
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文檔操作
一、查
1、比較運算
# SQL:=,!=,>,<,>=,<= # MongoDB:{key:value}代表什么等于什么,"$ne","$gt","$lt","gte","lte",其中"$ne"能用于所有數據類型#1、select * from db1.user where name = "alex"; db.user.find({'name':'alex'}) #這種key=value形式就代表等于#2、select * from db1.user where name != "alex"; db.user.find({'name':{"$ne":'alex'}})#3、select * from db1.user where id > 2; db.user.find({'_id':{'$gt':2}})#4、select * from db1.user where id < 3; db.user.find({'_id':{'$lt':3}})#5、select * from db1.user where id >= 2; db.user.find({"_id":{"$gte":2,}})#6、select * from db1.user where id <= 2; db.user.find({"_id":{"$lte":2}})?
2、邏輯運算
# SQL:and,or,not # MongoDB:字典中逗號分隔的多個條件是and關系,"$or"的條件放到[]內,"$not"#1、select * from db1.user where id >= 2 and id < 4; db.user.find({'_id':{"$gte":2,"$lt":4}})#2、select * from db1.user where id >= 2 and age < 40; db.user.find({"_id":{"$gte":2},"age":{"$lt":40}})#3、select * from db1.user where id >= 5 or name = "alex"; db.user.find({"$or":[{'_id':{"$gte":5}},{"name":"alex"}] })#4、select * from db1.user where id % 2=1; db.user.find({'_id':{"$mod":[2,1]}}) #mod意思是除以2的余數是1的id值#5、上題,取反 db.user.find({'_id':{"$not":{"$mod":[2,1]}}})?
3、成員運算
# SQL:in,not in # MongoDB:"$in","$nin"#1、select * from db1.user where age in (20,30,31); db.user.find({"age":{"$in":[20,30,31]}})#2、select * from db1.user where name not in ('alex','yuanhao'); db.user.find({"name":{"$nin":['alex','yuanhao']}})?
4、正則匹配
# SQL: regexp 正則 # MongoDB: /正則表達/i#1、select * from db1.user where name regexp '^j.*?(g|n)$'; db.user.find({'name':/^j.*?(g|n)$/i})?
5、獲取指定的字段
#1、select name,age from db1.user where id=3; #1就代表要,0就代表不要 db.user.find({'_id':3},{'_id':0,'name':1,'age':1})?
6、查詢數組和切片
#1、查看有dancing愛好的人 db.user.find({'hobbies':'dancing'})#2、查看既有dancing愛好又有tea愛好的人 db.user.find({'hobbies':{"$all":['dancing','tea']} })#3、查看第4個愛好為tea的人,3代表索引 db.user.find({"hobbies.3":'tea'})#4、查看所有人最后兩個愛好,slice代表切片 db.user.find({},{'hobbies':{"$slice":-2},"age":0,"_id":0,"name":0,"addr":0})#5、查看所有人的第2個到第3個愛好 db.user.find({},{'hobbies':{"$slice":[1,2]},"age":0,"_id":0,"name":0,"addr":0})> db.blog.find().pretty() {"_id" : 1,"name" : "alex意外死亡的真相","comments" : [{"name" : "egon","content" : "alex是誰???","thumb" : 200},{"name" : "wxx","content" : "我去,真的假的","thumb" : 300},{"name" : "yxx","content" : "吃喝嫖賭抽,欠下兩個億","thumb" : 40},{"name" : "egon","content" : "xxx","thumb" : 0}] } db.blog.find({},{'comments':{"$slice":-2}}).pretty() #查詢最后兩個 db.blog.find({},{'comments':{"$slice":[1,2]}}).pretty() #查詢1到2?
7、排序
# 排序:--1代表升序,-1代表降序 db.user.find().sort({"name":1,}) #意思是若age相同的話,就按id值排序 db.user.find().sort({"age":-1,'_id':1})?
8、分頁
# 分頁:--limit代表取多少個document,skip代表跳過前多少個document。 #意思是跳過前2個,獲取第3個,且按照升序age排序 db.user.find().sort({'age':1}).limit(3).skip(2)?
9、獲取數量
# 獲取數量 db.user.count({'age':{"$gt":30}}) --或者 db.user.find({'age':{"$gt":30}}).count()?
10、其它
#1、{'key':null} 匹配key的值為null或者沒有這個key db.t2.insert({'a':10,'b':111}) db.t2.insert({'a':20}) db.t2.insert({'b':null})> db.t2.find({"b":null}) { "_id" : ObjectId("5a5cc2a7c1b4645aad959e5a"), "a" : 20 } { "_id" : ObjectId("5a5cc2a8c1b4645aad959e5b"), "b" : null }#2、查找所有,返回數組 db.user.find() #等同于db.user.find({}) db.user.find().pretty()#3、查找一個,與find用法一致,只是只取匹配成功的第一個,返回對象 db.user.findOne({"_id":{"$gt":3}})?
?
二、改
注意一點:id主鍵不能修改,可以刪除
1、update的用法
update() 方法用于更新已存在的文檔。語法格式如下: db.collection.update(<query>,<update>,{upsert: <boolean>,multi: <boolean>,writeConcern: <document>} ) 參數說明:對比update db1.t1 set name='EGON',sex='Male' where name='egon' and age=18;query : 相當于where條件。 update : update的對象和一些更新的操作符(如$,$inc...等,相當于set后面的 upsert : 可選,默認為false,代表如果不存在update的記錄不更新也不插入,設置為true代表插入。 multi : 可選,默認為false,代表只更新找到的第一條記錄,設為true,代表更新找到的全部記錄。 writeConcern :可選,拋出異常的級別。更新操作是不可分割的:若兩個更新同時發送,先到達服務器的先執行,然后執行另外一個,不會破壞文檔。?
2、覆蓋式
#注意:除非是刪除,否則_id是始終不會變的 #1、覆蓋式: db.user.update({'age':20},{"name":"Wxx","hobbies_count":3}) 是用{"_id":2,"name":"Wxx","hobbies_count":3}覆蓋原來的記錄#2、一種最簡單的更新就是用一個新的文檔完全替換匹配的文檔。這適用于大規模式遷移的情況。例如 var obj=db.user.findOne({"_id":2})obj.username=obj.name+'SB' obj.hobbies_count++ delete obj.agedb.user.update({"_id":2},obj)?
3、選擇器
(1)$set
#設置:$set 通常文檔只會有一部分需要更新。可以使用原子性的更新修改器,指定對文檔中的某些字段進行更新。 更新修改器是種特殊的鍵,用來指定復雜的更新操作,比如修改、增加后者刪除#1、update db1.user set name="WXX" where id = 2 db.user.update({'_id':2},{"$set":{"name":"WXX",}})#2、沒有匹配成功則新增一條{"upsert":true} db.user.update({'_id':6},{"$set":{"name":"egon","age":18}},{"upsert":true})#3、默認只改匹配成功的第一條,{"multi":改多條} db.user.update({'_id':{"$gt":4}},{"$set":{"age":28}}) db.user.update({'_id':{"$gt":4}},{"$set":{"age":38}},{"multi":true})#4、修改內嵌文檔,把名字為alex的人所在的地址國家改成Japan db.user.update({'name':"alex"},{"$set":{"addr.country":"Japan"}})#5、把名字為alex的人的地2個愛好改成piao db.user.update({'name':"alex"},{"$set":{"hobbies.1":"piao"}})#6、刪除alex的愛好,$unset db.user.update({'name':"alex"},{"$unset":{"hobbies":""}}) set選擇器(2)增加和減少:$inc
#增加和減少:$inc#1、所有人年齡增加一歲 db.user.update({},{"$inc":{"age":1}},{"multi":true}) #2、所有人年齡減少5歲 db.user.update({},{"$inc":{"age":-5}},{"multi":true})?
(3)添加刪除數組內元素:$push,$pop,$pull ?和循環$each
#添加刪除數組內元素 往數組內添加元素:$push #1、為名字為yuanhao的人添加一個愛好read db.user.update({"name":"yuanhao"},{"$push":{"hobbies":"read"}})#2、為名字為yuanhao的人一次添加多個愛好tea,dancing #$each意思是循環數組中的每一個元素添加到數組中 db.user.update({"name":"yuanhao"},{"$push":{"hobbies":{"$each":["tea","dancing"]} }})按照位置且只能從開頭或結尾刪除元素:$pop #3、{"$pop":{"key":1}} 從數組末尾刪除一個元素 db.user.update({"name":"yuanhao"},{"$pop":{"hobbies":1} })#4、{"$pop":{"key":-1}} 從頭部刪除 db.user.update({"name":"yuanhao"},{"$pop":{"hobbies":-1} })#5、按照條件刪除元素,:"$pull" 把符合條件的統統刪掉,而$pop只能從兩端刪 db.user.update({'addr.country':"China"},{"$pull":{"hobbies":"read"} }, {"multi":true } )?
(4)避免添加重復:"$addToSet",就是插入相同的記錄時查詢也只顯示一個
#避免添加重復:"$addToSet" db.urls.insert({"_id":1,"urls":[]})db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}}) db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}}) db.urls.update({"_id":1},{"$addToSet":{"urls":'http://www.baidu.com'}})db.urls.update({"_id":1},{"$addToSet":{"urls":{"$each":['http://www.baidu.com','http://www.baidu.com','http://www.xxxx.com']}}} )?
(5)其它
#1、了解:限制大小"$slice",只留最后n個 db.user.update({"_id":5},{"$push":{"hobbies":{"$each":["read",'music','dancing'],"$slice":-2}} })#2、了解:排序The $sort element value must be either 1 or -1" db.user.update({"_id":5},{"$push":{"hobbies":{"$each":["read",'music','dancing'],"$slice":-1,"$sort":-1}} })#注意:不能只將"$slice"或者"$sort"與"$push"配合使用,且必須使用"$eah"
?
?
?
三、刪除
#1、刪除多個中的第一個 db.user.deleteOne({ 'age': 8 })#2、刪除國家為China的全部 db.user.deleteMany( {'addr.country': 'China'} ) #3、刪除全部 db.user.deleteMany({})?
?
補充:有待驗證
#專門做覆蓋的活 db.t2.save({'name':'whl'},{'name':'wwww'})#有就覆蓋,沒有就增加?
轉載于:https://www.cnblogs.com/wanghl1011/articles/8298516.html
總結
以上是生活随笔為你收集整理的1月16日学习内容整理:存储库MongoDB之文档的增删改查操作补充的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端MVVM模式及其在Vue和React
- 下一篇: 2018年10月22日-Python d