最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MongoDB教程之數(shù)據(jù)操作實例

 更新時間:2015年05月05日 08:47:03   投稿:junjie  
這篇文章主要介紹了MongoDB教程之數(shù)據(jù)操作實例,本文講解了批量插入、數(shù)據(jù)庫清除、數(shù)據(jù)更新、修改器、數(shù)組修改器、upsert等內容,需要的朋友可以參考下

1.  批量插入:

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

復制代碼 代碼如下:

    > db.users.remove()
 

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

    > db.one_collection.drop()
 

 
3.  數(shù)據(jù)更新: 

    如果在執(zhí)行數(shù)據(jù)更新時,有多條文檔匹配更新條件,為了避免更新后的_id出現(xiàn)重復性沖突,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.  修改器:

    使用修改器進行數(shù)據(jù)更新是原子的,也是高效的,不同于全部文檔更新的是被更新文檔的_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函數(shù)的最后一個參數(shù)來指定更新所有符合條件的文檔,如:
    > 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.  數(shù)組修改器:

復制代碼 代碼如下:

    > db.blog.insert({"title":"one blog"})
    > db.blog.find()
    { "_id" : ObjectId("4fcd909520668578cc1097dc"), "title" : "one blog" }
    --如果其操作的鍵不存在,則創(chuàng)建新的鍵值,其值的類型為數(shù)組類型。
    > log.update({"title":"one blog"}, {"$push": {"comments":{"content":"hello"}}})
    > db.blog.findOne()
    {
         "_id" : ObjectId("4fcd909520668578cc1097dc"),
         "comments" : [
                 {
                         "content" : "hello"
                 }
         ],
         "title" : "one blog"
    }
    --如果$push操作的鍵值已經(jīng)存在,且其值為數(shù)組類型,該修改符將為該數(shù)組添加新的數(shù)組元素。
    > 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適用于數(shù)組,如果數(shù)組中該元素已經(jīng)存在,該命令就不做任何操作后返回,否則將新元素插入數(shù)組。
    > 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的組合可以將數(shù)組插入到另外一個數(shù)組中。
    > 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從數(shù)組中刪除一個元素,如參數(shù)為1,表示從數(shù)組的尾部刪除一個元素,如果是-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修改符則是從數(shù)據(jù)中刪除指定的元素
    > 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"
    }
    --使數(shù)組中出現(xiàn)重復的元素,便于后面修改符的功能演示。
    > 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"
    }
    --在數(shù)組中,第一個元素的下標是0,然后依次增長。下面的示例是將數(shù)組中下標為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"
    }
    --有的時候,特別是在修改查詢結果的時候,我們無法獲知結果文檔數(shù)組下標,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是一種特殊的更新。要是沒有文檔符合更新條件,就會以這個條件和更新文檔為基礎創(chuàng)建一個新的文檔。如果找到了匹配的文檔,則正常更新。
   

復制代碼 代碼如下:

 > 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函數(shù),可以在文檔不存在時插入,存在時更新。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命令獲取更新多個文檔時被更新的文檔數(shù)量。
 

復制代碼 代碼如下:

    > 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表示修改的數(shù)量為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:修改文檔,對所找到的文檔執(zhí)行的更新。
    remove:布爾類型,表示是否刪除文檔。
    new:布爾類型,表示返回的是更新前的文檔還是更新后的文檔。缺省是更新前文檔。
    update和remove必須有一個存在,也只能有一個存在。如果沒有匹配的文檔,該命令會返回一個錯誤。這個命令有些限制,即一次只能處理一個文檔,也不能執(zhí)行upsert操作,只能更新已有文檔。

相關文章

  • MongoDB的$sample、aggregate和$rand實現(xiàn)隨機選取數(shù)據(jù)

    MongoDB的$sample、aggregate和$rand實現(xiàn)隨機選取數(shù)據(jù)

    在MongoDB中,我們可以使用內置的$sample聚合操作符來隨機生成數(shù)據(jù),$sample可以從集合文檔中隨機選擇指定數(shù)量的文檔,但由于其查詢整個集合的性能問題,應該慎用,aggregate方法以及$rand函數(shù)的結合使用可以實現(xiàn)更加靈活的查詢操作,并且可以對查詢結果進行精細篩選
    2024-01-01
  • mongodb官方的golang驅動基礎使用教程分享

    mongodb官方的golang驅動基礎使用教程分享

    這篇文章主要給大家介紹了關于mongodb官方的golang驅動基礎使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用mongodb具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12
  • MongoDB中MapReduce的使用方法詳解

    MongoDB中MapReduce的使用方法詳解

    MapReduce應該算是MongoDB操作中比較復雜的了,下面這篇文章主要給大家介紹了關于MongoDB中MapReduce使用的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起看看吧。
    2017-12-12
  • MongoDB4.2.5安裝方法操作步驟

    MongoDB4.2.5安裝方法操作步驟

    這篇文章主要介紹了MongoDB4.2.5安裝方法操作步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • mongodb 數(shù)據(jù)類型(null/字符串/數(shù)字/日期/內嵌文檔/數(shù)組等)

    mongodb 數(shù)據(jù)類型(null/字符串/數(shù)字/日期/內嵌文檔/數(shù)組等)

    MongoDB的文檔類似于JSON,JSON只是一種簡單的表示數(shù)據(jù)的方式,只包含了6種數(shù)據(jù)類型(null、布爾、數(shù)字、字符串、數(shù)組及對象),需要的朋友可以參考下
    2017-04-04
  • 利用MongoDB中oplog機制實現(xiàn)準實時數(shù)據(jù)的操作監(jiān)控

    利用MongoDB中oplog機制實現(xiàn)準實時數(shù)據(jù)的操作監(jiān)控

    MongoDB 的Replication是通過一個日志來存儲寫操作的,這個日志就叫做oplog,而下面這篇文章主要給大家介紹了利用MongoDB中oplog機制實現(xiàn)準實時數(shù)據(jù)的操作監(jiān)控的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-05-05
  • 在Linux服務器中配置mongodb環(huán)境的步驟

    在Linux服務器中配置mongodb環(huán)境的步驟

    這篇文章主要介紹了在Linux服務器中配置mongodb環(huán)境的步驟,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • mongodb3.4集群搭建實戰(zhàn)之高可用的分片+副本集

    mongodb3.4集群搭建實戰(zhàn)之高可用的分片+副本集

    這篇文章主要給大家介紹了關于mongodb3.4集群搭建實戰(zhàn)之高可用的分片+副本集的相關資料,文中通過示例代碼將實現(xiàn)的步驟一步步的介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。
    2017-08-08
  • db.serverStatus()命名執(zhí)行時報無權限問題的解決方法

    db.serverStatus()命名執(zhí)行時報無權限問題的解決方法

    這篇文章主要給大家介紹了關于db.serverStatus()命名執(zhí)行時報無權限問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-07-07
  • 在PyCharm中安裝Mongo Plugin的詳細教程

    在PyCharm中安裝Mongo Plugin的詳細教程

    這篇文章主要介紹了在PyCharm中安裝Mongo Plugin的詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11

最新評論

凤凰县| 永嘉县| 永寿县| 新余市| 靖边县| 长春市| 徐水县| 长顺县| 广安市| 十堰市| 铁力市| 漠河县| 贡嘎县| 都匀市| 崇义县| 大厂| 荣昌县| 县级市| 乌鲁木齐县| 安西县| 承德县| 炉霍县| 永安市| 和林格尔县| 道真| 宜章县| 北京市| 田东县| 历史| 阳朔县| 尼勒克县| 改则县| 成安县| 乳山市| 明星| 宝应县| 九龙城区| 南京市| 江达县| 鞍山市| 磐安县|