MongoDB添加、刪除、修改

轉自:http://blog.csdn.net/congcong68/article/details/46781777

1、簡介

     MongoDB是一個高性能,開源,無模式的文檔型數據庫,是當前NoSQL數據庫產品中最熱門的一種。數據被分組存儲在數據集中,被稱爲一個集合(Collenction)和對於存儲在MongoDB數據庫中的文件,咱們不須要知道它的任何結構定義的自由模式,在存儲數據時是以鍵-值對的集合鍵是字符串,值能夠是數據類型集合裏的任意類型,包括數組和文檔。sql

     MongoDB存儲在集合中的全部文件,集合是一組有一組共享公共索引的相關文檔,集合相似於關係數據庫中的表。在MongoDB中,這些操做修改單個採集數據,爲更新和刪除、刪除操做。咱們先認識一下MongDB結構:數據庫

MongoDB數組

關係數據庫性能

數據庫(database)url

數據庫(database)spa

集合(collection) .net

表(table) code

文檔(document)blog

行(row) 索引

 

                         集合(collection)                                                                                                           文檔(document)

 

二.MongoDB 添加

 

 1. 添加一個新的文檔到集合語法

  
[sql]  view plain  copy
 
  1. db.collection.insert()  

 

 例子:

 

[sql]  view plain  copy
 
  1. >db. orders.insert({                              
  2.      "onumber" : "001",    
  3.      "date" : "2015-07-02",    
  4.      "cname" : "zcy",    
  5. })  

 

 

相對於SQL語句是:

 

[sql]  view plain  copy
 
  1. INSERT INTO orders                      
  2.   (onumber, date, cname)        
  3. VALUES     (「001」,」 2015-07-02」,」 zcy」)  

2.同時添加多個文檔,能夠傳入數組

[sql]  view plain  copy
 
  1. > db. orders.insert(  
  2.  [{  
  3.          "onumber" : "001",    
  4.          "date" : "2015-07-02",    
  5.          "cname" : "zcy",    
  6.  },{  
  7.          "onumber" : "002",    
  8.          "date" : "2015-07-02",    
  9.          "cname" : "zcy1",    
  10.  }  
  11. ])  

 


 

3.添加文檔再包含文檔的(層級三級)

例子:

 

[sql]  view plain  copy
 
  1. >db. orders.insert({  
  2.           "onumber" : "001",    
  3.          "date" : "2015-07-02",    
  4.          "cname" : "zcy",    
  5.          "items" :[ {   
  6.                   "ino" : "001",  
  7.                   "quantity" : 2,    
  8.                   "price" : 4.0,    
  9.                   "products" : [  
  10.                                {  
  11.                                 "pno":"001",  
  12.                                 "pName":"p1"  
  13.                                 },  
  14.                                {  
  15.                                  "pno":"002",  
  16.                                  "pName":"p2"  
  17.                                }  
  18.                               ]  
  19.              },{   
  20.                "ino" : "002",  
  21.                "quantity" : 2,    
  22.                "price" : 6.0,    
  23.                "products" : [  
  24.                       {  
  25.                            "pno":"003",  
  26.                            "pName":"p3"  
  27.                        },  
  28.                       {  
  29.                            "pno":"004",  
  30.                            "pName":"p4"  
  31.                        }  
  32.                        ]  
  33.           }  
  34.    ]  
  35. })  

 

 

說明:

  存儲在MongoDB集合中的每一個文檔(document)都有一個默認的主鍵_id,這個主鍵名稱是固定的,它能夠是MongoDB支持的任何數據類型,默認是ObjectId

三. MongoDB 查詢

1.對文檔查詢的語法,咱們在這邊作簡單的介紹,咱們會專門的寫一篇比較詳細的介紹

 

[sql]  view plain  copy
 
  1. >db.collection.find()  

 

 

執行查詢全部的記錄

 

2.咱們能夠根據條件查詢

 例子:

 

[sql]  view plain  copy
 
  1. >db.orders.find({onumber:'001'});  

 

 四. MongoDB 修改

 

 

 1. 對文檔進行修改的語法

 

 

[sql]  view plain  copy
 
  1. >db.collection.update(  
  2.   <query>,  
  3.   <update>,  
  4.    upsert:<boolean>,  
  5.    multi:<boolean>  
  6. )  

 

參數

類型

描述

query

document

要修改哪些的查詢條件,相似於SQL 的 where

update

document

要修改的字段對應的值

upsert

boolean

可選的,默認值是false。若是根據查詢條件沒找到對應的文檔,若是設置爲true,至關於執行insert,若是設置爲false,不作任何的操做。

multi

boolean

可選的,默認值是false。若是根據查詢條件找到對應的多條記錄是,若是設置爲false時,只修改第一條,若是設置爲true,所有更新

 

2.對單個字段進行修改

 

名稱

描述

$inc

根據要添加的值遞增該字段的值。

$mul

將該字段的值乘以指定的值

$rename

重命名字段

$setOnInsert  

操做時,操做給相應的字段賦值

$set

用來指定一個鍵的值,若是不存在則建立它

$unset

用來指定一個鍵的值,若是不存在不建立建立它

$min

只有當指定的值小於現有字段值時才更新該字段。

$max

只有當指定的值大於現有字段值時才更新該字段。

$currentDate

設置當前日期字段的值,或者做爲一個日期或時間戳。

 

咱們接來對幾個比較經常使用的進行操做說明,其他的語法都是同樣

 

2) 採用$set來根據查詢條件修改文檔,用來指定一個鍵的值,若是不存在則建立它。

 

例子:

 

[sql]  view plain  copy
 
  1. > db.orders.update(                            
  2.    {"onumber" : "001"},  
  3.    { $set: { "cname " : "zcy"} },  
  4.    false,  
  5.    true  
  6. )  

 

SQL語句,若是set指定一個字段修改值時,若是沒有的話會報錯。

 

 

[sql]  view plain  copy
 
  1. UPDATE orders  
  2. set cname=’zcyUp’  
  3. WHERE onumber=’001’  

 

修改以前:

 

 

[sql]  view plain  copy
 
  1. > db. orders.insert({                             
  2.      "onumber" : "001",   
  3.     "date" : "2015-07-02",  
  4. })  

 

修改以後:

 

 

 

 multi 設置爲true,所有更新

 

3)$mul  將該字段的值乘以指定的值

語法:

 

[sql]  view plain  copy
 
  1. { $mul: { field: <number> } }  

 

例子:

 

[sql]  view plain  copy
 
  1. >db. orders.update(                            
  2. {"ino" : "001"},  
  3. { $mul: {"quantity" :3} }  
  4. )  

 


修改以前:

 

[sql]  view plain  copy
 
  1. >db. orders.insert({  
  2.                   "ino" : "001",  
  3.                   "quantity": 2,   
  4.                   "price" : 4.0  
  5. }  

 

 

修改以後:

 

 

 

4)$setOnInsert     操做時,操做給相應的字段賦值

語法:

 

[delphi]  view plain  copy
 
  1. db.collection.update(  
  2.   <query>,  
  3.    {$setOnInsert: { <field1>: <value1>, ... } },  
  4.    {upsert: true }  
  5. )  


 

例子:

 

[sql]  view plain  copy
 
  1. >db.products.update(  
  2.   {"ino" : "001"},  
  3.   {  
  4.     $set:{ "quantity":3 },  
  5.     $setOnInsert:{ "defaultQty":100 }  
  6.   },  
  7.   {upsert: true }  
  8. )  

 


5)$inc,指定屬性的值加上如今的值,若是鍵不存在則建立它。

語法:

 

[sql]  view plain  copy
 
  1. { $inc: { <field1>: <amount1>,<field2>: <amount2>, ... } }  

 


例子:

 

[sql]  view plain  copy
 
  1. >db. orders.update(                            
  2. {"onumber" : "001","items.ino":"001"},  
  3. { $inc: {"items.$.price" : 2.0} }  
  4. )  

 

修改前的數據:

 

[sql]  view plain  copy
 
  1. >db. orders.insert({  
  2.           "onumber" : "001",    
  3.          "date" : "2015-07-02",    
  4.          "cname" : "zcy",    
  5.          "items" :[ {   
  6.                   "ino" : "001",  
  7.                   "quantity" : 2,    
  8.                   "price" : 4.0,    
  9.                   "products" : [  
  10.                                {  
  11.                                 "pno":"001",  
  12.                                 "pName":"p1"  
  13.                                 },  
  14.                                {  
  15.                                  "pno":"002",  
  16.                                  "pName":"p2"  
  17.                                }  
  18.                               ]  
  19.              },{   
  20.                "ino" : "002",  
  21.                "quantity" : 2,    
  22.                "price" : 6.0,    
  23.                "products" : [  
  24.                       {  
  25.                            "pno":"003",  
  26.                            "pName":"p3"  
  27.                        },  
  28.                       {  
  29.                            "pno":"004",  
  30.                            "pName":"p4"  
  31.                        }  
  32.                        ]  
  33.           }  
  34.    ]  
  35. })  

 

 

 

修改後的數據:

 

 

 

ino等於001的price變成6

 

 

3.對數組進行修改

 

名稱

說明

$

做爲一個佔位符的更新與查詢條件在一個更新的第一要素

$addToSet

將元素添加到數組中,僅當它們在集合中不存在

$pop

刪除數組的第一個或最後一個項

$pullAll

從數組中移除全部匹配值

$pull

移除匹配指定查詢的全部數組元素

$pushAll

將全部值添加到數組中

$push

將值添加到數組中,若是有的數組存在則向數組末尾添加該值,若是數組不存在則建立該數組並保存該值

 

(1)根據查詢條件修改文檔裏內嵌文檔(第二層級的),例如咱們想修改items 字段ino爲001下的price的4修改8,語法items.$. price ,更新數組中第一個匹配的子文檔,咱們內嵌文檔的ino是惟一的,知足咱們的需求

例子:

 

[delphi]  view plain  copy
 
  1. >db. orders.update(                            
  2. {"onumber" : "001","items.ino":"001"},  
  3. { $set: {"items.$.price" : 8.0} }  
  4. )  

 

修改前的數據:

 

 

 

修改後的數據:

 

 

 

ino等於001的price值由4修改爲8

ino等於002的price值仍是不變

 

(2)根據查詢條件修改文檔裏內嵌文檔在內嵌文檔(第三層級的),例如咱們想修改items 字段ino等於001下的products而且pno等於001的pName值爲ps,語法items.0. products.$. pName,0表明items第一個數組(也就是數組的下標),$ 更新數組中第一個匹配的子文檔。

 例子:

 

[sql]  view plain  copy
 
  1. >db. orders.update(                            
  2. {"onumber" : "001","items.ino":"001","items.products.pno":"001"},  
  3. { $set: {"items.0.products.$.pName": "ps"} }  
  4. )  

 

 

修改前的數據:

 

 

 

修改後的數據:

 

 

 

 (3)$pop刪除數組的第一個或最後一個項

 語法:

 

[sql]  view plain  copy
 
  1. { $pop: { <field>: <-1 | 1>,... } }  

 

1最後一項

-1是第一項

 

例子:

 

[sql]  view plain  copy
 
  1. >db. orders.update(                            
  2. {"onumber" : "001"},  
  3. { $pop: {"items" : -1} }  
  4. )  

 

 

修改前的數據

 

 

 

修改後的數據

 

 

 

把ino等於001刪除,只剩ino爲002

 

(4)$push將值添加到數組中,若是有的數組存在則向數組末尾添加該值,若是數組不存在則建立該數組並保存該值

    語法:

   

[delphi]  view plain  copy
 
  1. { $push: { <field1>: <value1>,... } }  

 

  

   例子:

 

   

[sql]  view plain  copy
 
  1. >db. orders.update(                            
  2. {"onumber" : "001"},  
  3. { $push: {"items" : {  
  4. "ino" : "002",  
  5.                   "quantity" :2,   
  6.                   "price" : 6.0,   
  7.                   "products" : [  
  8. {  
  9.    "pno":"003",  
  10.    "pName":"p3"  
  11. },  
  12. {  
  13.    "pno":"004",  
  14.   "pName":"p4"  
  15. }  
  16. ]  
  17. }  
  18. } }  
  19. )  

 

 

 修改前的數據:

 

 

[sql]  view plain  copy
 
  1. >db. orders.insert({  
  2. "onumber" : "001",   
  3.         "date" : "2015-07-02",   
  4.         "cname" :"zcy",   
  5.  "items" :[ {  
  6. "ino" : "001",  
  7.                   "quantity": 2,   
  8.                   "price" : 4.0,   
  9.                   "products" : [  
  10. {  
  11.    "pno":"001",  
  12.   "pName":"p1"  
  13. },  
  14. {  
  15.    "pno":"002",  
  16.   "pName":"p2"  
  17. }  
  18. ]  
  19. }  
  20. ]  
  21. })  

 

修改後的數據:

 

 

$pull與$push相反,這邊就不介紹了。

5)刪除集合中某一字段

//例如要把User表中address字段刪除
db.User.update({},{$unset:{'address':''}},false, true)

 

5、MongoDB刪除

 

 

(1) 刪除文檔

語法

db.collection.remove()

 

例子:

1)db. orders.remove({})

 

 刪除orders集合的全部數據,集合還存在,索引都還存在,至關與SQ的truncate命令

 

2)db. orders.remove({"onumber": "001"})根據條件刪除數據

 

(2) 刪除集合

 語法:

db.collection.drop()  集合、索引都不存在了。

相關文章
相關標籤/搜索