mongodb常用api

作者: 胡儒清 | 来源:发表于2019-07-03 15:48 被阅读0次

    前言

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

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

    MongoDB 关系数据库
    数据库(database) 数据库(database)
    集合(collection) 表(table)
    文档(document) 行(row)

    目录

    1. 添加数据

      1.  db.collection.insert()  // 添加一个
         db.collection.insert([])  // 添加多个
        
    2. 查询数据

      db.collection.find()  // 查找全部
      db.collection.find({onumber:'001'}) // 根据条件查询
      
    3. 修改数据

      db.collection.update(  
        <query>,  
        <update>,  
         upsert:<boolean>,  
         multi:<boolean>  
      )  
      $set // 修改某个字段
      $rename  // 修改字段名称
      $inc  // 新值和旧值加在一起
      
    4. 删除数据

      db.orders.remove({})  // 删除集合所有数据
      db.orders.remove({"onumber": "001"}) // 根据条件删除数据
      db.collection.drop()  // 删除集合
      

    假设现在有一个数据库叫做db,有一个collection(集合)叫做orders

    Mongodb添加数据

    添加一个新的文档到集合语法 db.collection.insert()

    例子1

    db.orders.find({onumber:'001'});  
    

    同时添加多个文档,可以传入数组

    例子2

    db. orders.insert(  
     [{  
             "onumber" : "001",    
             "date" : "2015-07-02",    
             "cname" : "zcy",    
     },{  
             "onumber" : "002",    
             "date" : "2015-07-02",    
             "cname" : "zcy1",    
     }  
    ]) 
    

    例子3

    db. orders.insert({  
              "onumber" : "001",    
             "date" : "2015-07-02",    
             "cname" : "zcy",    
             "items" :[ {   
                      "ino" : "001",  
                      "quantity" : 2,    
                      "price" : 4.0,    
                      "products" : [  
                                   {  
                                    "pno":"001",  
                                    "pName":"p1"  
                                    },  
                                   {  
                                     "pno":"002",  
                                     "pName":"p2"  
                                   }  
                                  ]  
                 },{   
                   "ino" : "002",  
                   "quantity" : 2,    
                   "price" : 6.0,    
                   "products" : [  
                          {  
                               "pno":"003",  
                               "pName":"p3"  
                           },  
                          {  
                               "pno":"004",  
                               "pName":"p4"  
                           }  
                           ]  
              }  
       ]  
    })
    

    Mongodb查询

    1. 查询全部 db.collection.find()

      db.user.find()
      
    2. 根据条件查询 db.collection.find({})

      db.user.find({username: 'huruqing'})
      

    Mongodb修改

    db.collection.update(  
      <query>,  
      <update>,  
       upsert:<boolean>,  
       multi:<boolean>  
    )  
    
    参数 类型 描述
    query 对象,比如 {username:'huruqing'} 查询条件
    update 对象,比如 {$set:{age: 100}} $set是用来修改某个字段的值,​$min,$max
    upsert boolean true->找不到就新增数据,false->不新增
    multi boolean true->全部更新,false->更新一条

    (1) 对单个字段进行修改

    名称 描述
    $inc 根据要添加的值递增该字段的值。
    $mul 将该字段的值乘以指定的值
    $rename 重命名字段
    $setOnInsert 操作时,操作给相应的字段赋值
    $set 用来指定一个键的值,如果不存在则创建它
    $unset 用来指定一个键的值,如果不存在不创建创建它
    $min 只有当指定的值小于现有字段值时才更新该字段。
    $max 只有当指定的值大于现有字段值时才更新该字段。
    $currentDate 设置当前日期字段的值,或者作为一个日期或时间戳。

    我们接来对几个比较常用的进行操作说明,其余的语法都是一样

    // 1. 采用$set来根据查询条件修改文档,用来指定一个键的值,如果不存在则创建它。
    db.orders.update(                            
       {"onumber" : "001"},  
       { $set: { "cname " : "zcy"} },  
       false, 
       // multi 设置为true,全部更新
       true  
    )  
    
    // 2. $mul  将该字段的值乘以指定的值 { $mul: { field: <number> } }  
    db. orders.update(                            
    {"ino" : "001"},  
    { $mul: {"quantity" :3} }  
    ) 
    
    // 3. $setOnInsert     操作时,操作给相应的字段赋值
    db.collection.update(  
      <query>,  
       {$setOnInsert: { <field1>: <value1>, ... } },  
       {upsert: true }  
    ) 
    
    db.products.update(  
          {"ino" : "001"},  
          {  
            $set:{ "quantity":3 },  
            $setOnInsert:{ "defaultQty":100 }  
          },  
          {upsert: true }  
        )  
        
    $inc,指定属性的值加上现在的值,如果键不存在则创建它。
    { $inc: { <field1>: <amount1>,<field2>: <amount2>, ... } }  
    
    db. orders.update(                            
    {"onumber" : "001","items.ino":"001"},  
    { $inc: {"items.$.price" : 2.0} }  
    ) 
    

    (2) 对数组进行修改

    名称 说明
    $ 作为一个占位符的更新与查询条件在一个更新的第一要素
    $addToSet 将元素添加到数组中,仅当它们在集合中不存在
    $pop 删除数组的第一个或最后一个项
    $pullAll 从数组中移除所有匹配值
    $pull 移除匹配指定查询的所有数组元素
    $pushAll 将所有值添加到数组中
    $push 将值添加到数组中,如果有的数组存在则向数组末尾添加该值,如果数组不存在则创建该数组并保存该值
    1. 根据查询条件修改文档里内嵌文档(第二层级的),例如我们想修改items 字段ino为001下的price的4修改8,语法items.$. price ,更新数组中第一个匹配的子文档,我们内嵌文档的ino是唯一的,满足我们的需求

      例子:

    db. orders.update(                            
    {"onumber" : "001","items.ino":"001"},  
    { $set: {"items.$.price" : 8.0} }  
    ) 
    
    1. 根据查询条件修改文档里内嵌文档在内嵌文档(第三层级的),例如我们想修改items 字段ino等于001下的products并且pno等于001的pName值为ps,语法items.0. products.. pName,0代表items第一个数组(也就是数组的下标), 更新数组中第一个匹配的子文档。
    db. orders.update(                            
    {"onumber" : "001","items.ino":"001","items.products.pno":"001"},  
    { $set: {"items.0.products.$.pName": "ps"} }  
    )  
    
    1. $pop删除数组的第一个或最后一个项

    2. { $pop: { <field>: <-1 | 1>,... } }  // 1最后一项-1是第一项
      
      db. orders.update(                            
      {"onumber" : "001"},  
      { $pop: {"items" : -1} }  
      ) 
      
    3. $push将值添加到数组中,如果有的数组存在则向数组末尾添加该值,如果数组不存在则创建该数组并保存该值

    4. { $push: { <field1>: <value1>,... } }  
      
      db.orders.update({
        "onumber": "001"
      }, {
        $push: {
          "items": {
            "ino": "002",
            "quantity": 2,
            "price": 6.0,
            "products": [{
                "pno": "003",
                "pName": "p3"
              },
              {
                "pno": "004",
                "pName": "p4"
              }
            ]
          }
        }
      })
      

    删除数据

    语法 db.collection.remove()
    
    // 1. 删除orders集合的所有数据,集合还存在,索引都还存在,相当与SQ的truncate命令
    db.orders.remove({})
    
    // 2. 根据条件删除数据
    db.orders.remove({"onumber": "001"})
    
    // 3. 删除集合、索引都不存在了。
    db.collection.drop()
    

    转自 https://www.cnblogs.com/wu-chao/p/8418541.html

    相关文章

      网友评论

        本文标题:mongodb常用api

        本文链接:https://www.haomeiwen.com/subject/uerqhctx.html