zoukankan      html  css  js  c++  java
  • MongoDB添加、删除、修改

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

    一、简介

         MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSQL数据库产品中最热门的一种。数据被分组存储在数据集中,被称为一个集合(Collenction)和对于存储在MongoDB数据库中的文件,我们不需要知道它的任何结构定义的自由模式,在存储数据时是以键-值对的集合键是字符串,值可以是数据类型集合里的任意类型,包括数组和文档。

         MongoDB存储在集合中的所有文件,集合是一组有一组共享公共索引的相关文档,集合类似于关系数据库中的表。在MongoDB中,这些操作修改单个采集数据,为更新和删除、删除操作。我们先认识一下MongDB结构:

    MongoDB

    关系数据库

    数据库(database)

    数据库(database)

    集合(collection) 

    表(table) 

    文档(document)

    行(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)

    五、MongoDB删除

    (1) 删除文档

    语法

    db.collection.remove()

    例子:

    1)db. orders.remove({})

     删除orders集合的所有数据,集合还存在,索引都还存在,相当与SQ的truncate命令

    2)db. orders.remove({"onumber": "001"})根据条件删除数据

    (2) 删除集合

     语法:

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

  • 相关阅读:
    hlgoj 1766 Cubing
    Reverse Linked List
    String to Integer
    Bitwise AND of Numbers Range
    Best Time to Buy and Sell Stock III
    First Missing Positive
    Permutation Sequence
    Next Permutation
    Gray Code
    Number of Islands
  • 原文地址:https://www.cnblogs.com/yanwei-wang/p/8600825.html
Copyright © 2011-2022 走看看