亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MongoDB > 正文

MongoDB教程之數據操作實例

2020-10-29 18:51:52
字體:
來源:轉載
供稿:網友

1.  批量插入:

     以數組的方式一次插入多個文檔可以在單次TCP請求中完成,避免了多次請求中的額外開銷。就數據傳輸量而言,批量插入的數據中僅包含一份消息頭,而多次單條插入則會在每次插入數據時封裝消息頭數據。對于數據導入而言,我們可以使用mongoimport完成。
 
2.  數據庫清除:

復制代碼 代碼如下:

    > db.users.remove()
 

    以上命令將會清除users集合中的所有數據,但是不會刪除集合本身以及關聯的索引。數據刪除操作是不可恢復的,一旦刪除就物理的刪除了。對于全集合清除這種case,一個更為有效的方式是直接刪除集合對象本身以及他關聯的所有索引,之后再依次重建,如:
 
復制代碼 代碼如下:

    > db.one_collection.drop()
 

 
3.  數據更新: 

    如果在執行數據更新時,有多條文檔匹配更新條件,為了避免更新后的_id出現重復性沖突,MongoDB將僅更新第一條查詢結果,如:
 

復制代碼 代碼如下:

    > post1 = { "name": "stephen", "age" : "35"}
    { "name" : "stephen", "age" : "35" }
    > post2 = { "name": "stephen", "age" :  36}
    { "name" : "stephen", "age" : 36 }
    > db.blog.insert(post1)
    > db.blog.insert(post2)
    > post3 = { "name" : "stephen", "age": 37}
    { "name" : "stephen", "age" : 37 }
    > db.blog.update({"name":"stephen"},post3)
    > db.blog.find()
    { "_id" : ObjectId("4fcd7e2e20668578cc1097d8"), "name" : "stephen", "age" : 36 }
    { "_id" : ObjectId("4fcd7e2820668578cc1097d7"), "name" : "stephen", "age" : 37 }
 

 
4.  修改器:

    使用修改器進行數據更新是原子的,也是高效的,不同于全部文檔更新的是被更新文檔的_id不會變化,而文檔完全更新則會修改文檔的_id,以及相關的索引。
  

復制代碼 代碼如下:

 > db.blog.find()
    { "_id" : ObjectId("4fcd7e2820668578cc1097d7"), "name" : "stephen", "age" : 41 }
    { "_id" : ObjectId("4fcd81bb20668578cc1097d9"), "name" : "stephen", "age" : 38 }
    --$inc修改符將匹配條件的文檔的age鍵原子加一,缺省情況下只是更新第一條符合條件的文檔。
    > db.blog.update({"name":"stephen"},{"$inc":{"age":1}}) 
    > db.blog.find()
    { "_id" : ObjectId("4fcd7e2820668578cc1097d7"), "name" : "stephen", "age" : 42 }
    { "_id" : ObjectId("4fcd81bb20668578cc1097d9"), "name" : "stephen", "age" : 38 }
    --可以通過update函數的最后一個參數來指定更新所有符合條件的文檔,如:
    > db.blog.update({"name":"stephen"},{"$inc":{"age":1}},true,true)
    > db.blog.find()
    { "_id" : ObjectId("4fcd7e2820668578cc1097d7"), "name" : "stephen", "age" : 43 }
    { "_id" : ObjectId("4fcd81bb20668578cc1097d9"), "name" : "stephen", "age" : 39 }

    --$set修改符直接修改匹配文檔的內容,如果修改的鍵存在則直接修改,否則新增。
    > db.blog.update({"name":"stephen"},{"$set":{"genda":"male"}})
    > db.blog.find()
    { "_id" : ObjectId("4fcd88b720668578cc1097da"), "age" : "35", "genda" : "male", "name" : "stephen" }
    --$unset修改符合$set的功能是完全相反的,如:
    > db.blog.update({"name":"stephen"},{"$unset":{"genda":"male"}})
    > db.blog.find()
    { "_id" : ObjectId("4fcd88b720668578cc1097da"), "age" : "35", "name" : "stephen" }
    --可以通過$set修改符修改嵌套子文檔。
    > db.blog.find()
    { "_id" : ObjectId("4fcd8e0220668578cc1097db"), "title" : "A Blog Post", "author" : { "name" : "joe", "email" : "joe@ee.com" } }
    > db.blog.update({"title":"A Blog Post"},{"$set":{"author.name":"joe schmoe"}})
    > db.blog.find()
    { "_id" : ObjectId("4fcd8e0220668578cc1097db"), "author" : { "email" : "joe@ee.com", "name" : "joe schmoe" }, "title" : "A Blog Post" }


 

5.  數組修改器:

復制代碼 代碼如下:

    > db.blog.insert({"title":"one blog"})
    > db.blog.find()
    { "_id" : ObjectId("4fcd909520668578cc1097dc"), "title" : "one blog" }
    --如果其操作的鍵不存在,則創建新的鍵值,其值的類型為數組類型。
    > log.update({"title":"one blog"}, {"$push": {"comments":{"content":"hello"}}})
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fcd909520668578cc1097dc"),
         "comments" : [
                 {
                         "content" : "hello"
                 }
         ],
         "title" : "one blog"
    }
    --如果$push操作的鍵值已經存在,且其值為數組類型,該修改符將為該數組添加新的數組元素。
    > db.blog.update({"title":"one blog"}, {"$push": {"comments":{"content":"word"}}
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fcd909520668578cc1097dc"),
         "comments" : [
                 {
                         "content" : "hello"
                 },
                 {
                         "content" : "word"
                 }
         ],
         "title" : "one blog"
    }
 
    > post = {"username":"joe", "emails":["joe@example.com","joe@gmail.com","joe@yahoo.com"]}
    {
         "username" : "joe",
         "emails" : [
                 "joe@example.com",
                 "joe@gmail.com",
                 "joe@yahoo.com"
         ]
    }
    > db.blog.insert(post)
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fd2e468b2ac404941134bed"),
         "username" : "joe",
         "emails" : [
                 "joe@example.com",
                 "joe@gmail.com",
                 "joe@yahoo.com"
         ]
    }
    --$addToSet適用于數組,如果數組中該元素已經存在,該命令就不做任何操作后返回,否則將新元素插入數組。
    > db.blog.update({"username":"joe"}, {"$addToSet": {"emails":"joe@gmail.com"}})
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fd2e468b2ac404941134bed"),
         "username" : "joe",
         "emails" : [
                 "joe@example.com",
                 "joe@gmail.com",
                 "joe@yahoo.com"
         ]
    }
    > db.blog.update({"username":"joe"}, {"$addToSet": {"emails":"joe@hotmail.com"}
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fd2e468b2ac404941134bed"),
         "emails" : [
                 "joe@example.com",
                 "joe@gmail.com",
                 "joe@yahoo.com",
                 "joe@hotmail.com"
         ],
         "username" : "joe"
    }
    --$addToSet和$each的組合可以將數組插入到另外一個數組中。
    > db.blog.update({"username":"joe"},{"$addToSet": {"emails":{"$each":["joe@php.net","joe@example.com"]}}})
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fd2e468b2ac404941134bed"),
         "emails" : [
                 "joe@example.com",
                 "joe@gmail.com",
                 "joe@yahoo.com",
                 "joe@hotmail.com",
                 "joe@php.net"
         ],
         "username" : "joe"
    }
    --$pop從數組中刪除一個元素,如參數為1,表示從數組的尾部刪除一個元素,如果是-1,則從頭部刪除。
    > db.blog.update({"username":"joe"}, {"$pop":{"emails":1}})
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fd2e468b2ac404941134bed"),
         "emails" : [
                 "joe@example.com",
                 "joe@gmail.com",
                 "joe@yahoo.com",
                 "joe@hotmail.com"
         ],
         "username" : "joe"
    }
    > db.blog.update({"username":"joe"}, {"$pop":{"emails":-1}})
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fd2e468b2ac404941134bed"),
         "emails" : [
                 "joe@gmail.com",
                 "joe@yahoo.com",
                 "joe@hotmail.com"
         ],
         "username" : "joe"
    }
    --$pull修改符則是從數據中刪除指定的元素
    > db.blog.update({"username":"joe"}, {"$pull":{"emails":"joe@yahoo.com"}})
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fd2e468b2ac404941134bed"),
         "emails" : [
                 "joe@gmail.com",
                 "joe@hotmail.com"
         ],
         "username" : "joe"
    }
    --使數組中出現重復的元素,便于后面修改符的功能演示。
    > db.blog.update({"username":"joe"}, {"$push": {"emails":"joe@gmail.com"}})
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fd2e468b2ac404941134bed"),
         "emails" : [
                 "joe@gmail.com",
                 "joe@hotmail.com",
                 "joe@gmail.com"
         ],
         "username" : "joe"
    }
    --在數組中,第一個元素的下標是0,然后依次增長。下面的示例是將數組中下標為1
    --(第二個元素)的元素值修改為新值。
    > db.blog.update({"username":"joe"}, {"$set":{"emails.1":"joe@example.com"}})
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fd2e468b2ac404941134bed"),
         "emails" : [
                 "joe@gmail.com",
                 "joe@example.com",
                 "joe@gmail.com"
         ],
         "username" : "joe"
    }
    --有的時候,特別是在修改查詢結果的時候,我們無法獲知結果文檔數組下標,MongoDB
    --提供了$定位符表示查詢結果的下標。但是該他只更新第一個匹配元素。
    > db.blog.update({"emails":"joe@gmail.com"},{"$set":{"emails.$":"joe@hotmail.com"}})
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fd2e468b2ac404941134bed"),
         "emails" : [
                 "joe@hotmail.com",
                 "joe@example.com",
                 "joe@gmail.com"
         ],
         "username" : "joe"
   }
 

6.  upsert:

    upsert是一種特殊的更新。要是沒有文檔符合更新條件,就會以這個條件和更新文檔為基礎創建一個新的文檔。如果找到了匹配的文檔,則正常更新。
   

復制代碼 代碼如下:

 > db.blog.remove()
    > db.blog.update({"username":"joe"},{"username":"joe","age":30},true)
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fd2faac576cd9c101ac0f3d"),
         "username" : "joe",
         "age" : 30
    }
 

    下面的示例可以在新增的同時,修改新增后的值。
 
復制代碼 代碼如下:

    > db.blog.remove()
    > db.blog.update({"count":25},{"$inc":{"count":3}},true)
    > db.blog.find()
    { "_id" : ObjectId("4fd2fd59576cd9c101ac0f3e"), "count" : 28 }
 

    save是一個shell函數,可以在文檔不存在時插入,存在時更新。upsert也可以完成同樣的工作,但是不如save命令方便。
 
復制代碼 代碼如下:

    > var x = db.blog.findOne()
    > x.count = 40
    40
    > db.blog.save(x)
    > db.blog.findOne()
    { "_id" : ObjectId("4fd2fde4576cd9c101ac0f3f"), "count" : 40 }
 

7.  返回已更新文檔:

    可以通過getLastError命令獲取更新多個文檔時被更新的文檔數量。
 

復制代碼 代碼如下:

    > db.blog.remove()
    > db.blog.insert({"name":"stephen"})
    > db.blog.insert({"name":"stephen3"})
    > db.blog.insert({"name":"stephen4"})
    > db.blog.update({},{"$set":{"name":"liu"}},false,true)
    --n:3表示修改的數量為3。
    > db.runCommand({getLastError:1})
    {
        "updatedExisting" : true,
        "n" : 3,
        "connectionId" : 1,
        "err" : null,
        "ok" : 1
    }
 

    findAndModify可以原子性的修改查詢結果,也可以原子性的刪除查詢結果。
 
復制代碼 代碼如下:

    > db.blog.insert({"name":"stephen"})
    > db.blog.insert({"name":"stephen2"})
    > db.blog.find()
    { "_id" : ObjectId("4fd30cd117f6dccb7c058244"), "name" : "stephen" }
    { "_id" : ObjectId("4fd30cd417f6dccb7c058245"), "name" : "stephen2" }        
    > db.runCommand({"findAndModify":"blog", "query":{"name":"stephen2"},"update":{"$set":{"name":"stephen3"}}})
    > db.blog.find()
    { "_id" : ObjectId("4fd30cd117f6dccb7c058244"), "name" : "stephen" }
    { "_id" : ObjectId("4fd30cd417f6dccb7c058245"), "name" : "stephen3" }
    > runCommand({"findAndModify":"blog", "query":{"name":"stephen3"},"remove":true})
    > db.blog.find()
    { "_id" : ObjectId("4fd30cd117f6dccb7c058244"), "name" : "stephen" }
 

    findAndModify命令中每個鍵對應的值如下:
    findAndModify: 字符串類型的集合名稱。
    query:查詢文檔,用來檢索文檔的條件。
    sort: 排序結果的條件。
    update:修改文檔,對所找到的文檔執行的更新。
    remove:布爾類型,表示是否刪除文檔。
    new:布爾類型,表示返回的是更新前的文檔還是更新后的文檔。缺省是更新前文檔。
    update和remove必須有一個存在,也只能有一個存在。如果沒有匹配的文檔,該命令會返回一個錯誤。這個命令有些限制,即一次只能處理一個文檔,也不能執行upsert操作,只能更新已有文檔。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
青青久久av北条麻妃海外网| 国产v综合v亚洲欧美久久| 午夜精品福利在线观看| 91精品国产乱码久久久久久蜜臀| 在线看片第一页欧美| 久久乐国产精品| 欧美精品videos另类日本| 91社影院在线观看| 国产情人节一区| 91av免费观看91av精品在线| 综合网日日天干夜夜久久| 亚洲人成网站免费播放| 国产一区二区三区丝袜| 国产精品网红福利| 欧美成人免费在线观看| 最近2019年中文视频免费在线观看| 成人国产精品av| 中文字幕一精品亚洲无线一区| 日韩一区视频在线| 亚洲香蕉成视频在线观看| 日韩av第一页| 亚洲精品99久久久久中文字幕| 在线观看亚洲视频| 国产精品爱久久久久久久| 国产精品久久久久久久9999| 91麻豆国产精品| 蜜臀久久99精品久久久无需会员| 隔壁老王国产在线精品| 日韩欧美一区二区在线| 大胆欧美人体视频| 亚洲白虎美女被爆操| 日本精品一区二区三区在线播放视频| 久久精品视频一| 欧美激情在线一区| 亚洲欧美日韩高清| 在线视频免费一区二区| 国产欧美日韩91| 国产亚洲美女精品久久久| 亚洲在线一区二区| 久久精品亚洲一区| 亚洲午夜色婷婷在线| 国产一区二区丝袜高跟鞋图片| 91av在线影院| 国产精品亚洲аv天堂网| 日韩国产一区三区| 久久精品亚洲94久久精品| 色七七影院综合| 成人综合网网址| 日韩欧美一区二区三区久久| 久久久久久久久久国产| 精品无人区太爽高潮在线播放| 亚洲欧美日韩图片| 久久精品人人爽| 91精品视频大全| 韩国19禁主播vip福利视频| 亚洲视频在线观看免费| 国产精品青青在线观看爽香蕉| 国产精品久久一区主播| 欧美又大又粗又长| 在线播放国产一区中文字幕剧情欧美| 午夜精品福利电影| 国产丝袜一区二区三区| 97色在线播放视频| 欧美一级大片在线免费观看| 国产精品欧美日韩一区二区| 精品国产一区二区三区在线观看| 亚洲成人激情在线| 国产精品免费一区二区三区都可以| 91精品国产91久久久久久吃药| 国产一区二区丝袜高跟鞋图片| 午夜精品久久久久久久白皮肤| 久久久久久久久久亚洲| 色婷婷综合成人av| 51午夜精品视频| 日韩av在线不卡| 亚洲欧洲xxxx| 欧美伊久线香蕉线新在线| 国产精品国产三级国产aⅴ9色| 日韩日本欧美亚洲| 国产精品久久久久国产a级| 精品福利在线看| 亚洲成人1234| 国内伊人久久久久久网站视频| 亚洲免费视频在线观看| 美日韩丰满少妇在线观看| 色综合老司机第九色激情| 亚洲精品乱码久久久久久按摩观| 欧美大片免费观看在线观看网站推荐| 国产午夜一区二区| 黄色成人av在线| 亚洲大胆美女视频| 中文字幕亚洲无线码a| 亚洲国产精品成人av| 欧美电影在线观看网站| 国产一区二区免费| 久久亚洲欧美日韩精品专区| 欧美极品少妇xxxxx| 日韩中文字幕国产| 欧美片一区二区三区| 成人黄色大片在线免费观看| 国产丝袜精品视频| 成人妇女淫片aaaa视频| 中国日韩欧美久久久久久久久| 国产suv精品一区二区三区88区| 精品少妇一区二区30p| 亚洲欧洲在线视频| 欧美激情精品久久久| 2021久久精品国产99国产精品| 亚洲电影免费在线观看| 91青草视频久久| www.日韩视频| 欧美一级成年大片在线观看| 欧美激情亚洲综合一区| 91香蕉嫩草神马影院在线观看| 日韩在线视频观看正片免费网站| 色99之美女主播在线视频| 精品夜色国产国偷在线| 国产精品成人一区| 精品在线欧美视频| 97视频免费在线观看| 亚洲91精品在线| 欧美激情在线有限公司| 98精品国产自产在线观看| 欧美—级a级欧美特级ar全黄| 亚洲欧洲日韩国产| 欧美专区在线观看| 亚洲free性xxxx护士hd| 98精品国产自产在线观看| 国产精品精品视频| 国产精品国产三级国产专播精品人| 91精品免费视频| 亚洲视频专区在线| 黄色91在线观看| 欧美极品少妇全裸体| 色黄久久久久久| 日韩中文字幕网站| 丝袜一区二区三区| 不卡av日日日| 久久久综合av| 最近的2019中文字幕免费一页| 亚洲激情第一页| 国产精品久久久久久久一区探花| 青青草国产精品一区二区| 中文字幕精品在线| 国产亚洲精品美女| 欧美成年人视频网站| 欧美一级电影免费在线观看| 国产999在线观看| www日韩欧美| 国产视频精品va久久久久久| 日韩视频精品在线| 欧洲日本亚洲国产区| 亚洲人成电影在线| 精品久久久久久久久久ntr影视| 国产精品亚洲аv天堂网| 欧美—级高清免费播放| 欧美日韩午夜激情| 2019最新中文字幕| 国产成人在线视频| 欧美www在线| 欧美午夜精品久久久久久人妖| 精品在线观看国产| 日本亚洲欧洲色α| 欧美人与物videos|