工作生活

mongodb常用api

2019-07-03  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读