MongoDB命令之集合数据操作(CURD)

  在MongoDB命令之基本操作 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中可以看到如果新建了数据库,但是数据库中没有数据,使用show dbs是看不到新建的数据库的,必须insert一条数据。这个操作就是MongoDB数据操作的增添数据,那还有其他操作(增删查改)下面详细介绍。

  一、数据添加:insert

    1、插⼊单条数据:db.集合名.insert(⽂档)

      ⽂档的数据结构和JSON基本⼀样,所有存储在集合中的数据都是BSON格式。

       MongoDB中原没有名为test的数据库。插入数据时,MongoDB自动创建名为test的数据库同时建名为lf_resume_preview的集合。根据MongoDB返回的操作结果看,insert一份文档成功。

    2、插⼊多条数据:db.集合名.insert([⽂档,⽂档])

      测试上例中的数据,并增加一份文档

       通过验证可以看到相同的数据也insert成功。相同数据在集合中的不同点在于_id——系统自动生成了一个,其规则为:

        1)4个字节表示时间戳 ObjectId("对象Id字符串").getTimestamp() 来获取
        2)接下来的3个字节是机器标识码
        3)紧接的两个字节由进程id组成(PID
        4)最后三个字节是随机数
      当然
如果不需要系统生成也可以自定义(可以参考MongoDB 自动增长 | 菜鸟教程 (runoob.com))。

    也可以先生成文档,在Insert文档,如下:

      

       

  二、数据查询:find

    上面案例中已经使用了数据查询db.collectionname.find()——这是一个没有任何条件的查询。实际上find方法支持条件查询,具体如下:

    1、比较条件查询:db.collectionname.find(Conditions)

      

      

    2、逻辑条件查询

      1)and 条件

        MongoDB find() ⽅法可以传⼊多个键(key),每个键(key)以逗号隔开,即常规 SQL AND 条件db.集合名.find({key1:value1, key2:value2}).pretty()

      2)or 条件
        db.集合名.find({$or:[{key1:value1}, {key2:value2}]}).pretty()
      3)not 条件
        db.集合名.find({key:{$not:{$操作符
:value}}).pretty()

    3、分页查询

      db.集合名.find({条件}).sort({排序字段:排序⽅式})).skip(跳过的⾏数).limit(⼀⻚显示多少数据)

  三、数据更新:update

    $set :设置字段值

    $unset :删除指定字段

    $inc:对修改的值进⾏⾃增

    db.集合名.update(

      <query>,            //query : update的查询条件,类似sql update查询内where后⾯的

      <update>,            //update : update的对象和⼀些更新的操作符(如$set,$inc...)等,也可以理解为sql updateset后⾯的

      {

        upsert: <boolean>,       //upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插⼊objNew,true为插⼊,默认是false,不插⼊。

        multi: <boolean>,      //multi : 可选, MongoDB 默认是false,只更新找到的第⼀条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

        writeConcern: <document>  //writeConcern :可选,⽤来指定mongod对写操作的回执⾏为⽐如写的⾏为是否需要确认。

      }

     )

    举例:db.集合名.update({条件},{$set:{字段名:}},{multi:true})

      

    writeConcern 包括字段:{ w: <value>, j: <boolean>, wtimeout: <number> }

    w:指定写操作传播到的成员数量。⽐如:

      w=1(默认) :则要求得到写操作已经传播到独⽴的Mongod实例或副本集的primary成员的确认

      w=0:则不要求确认写操作,可能会返回socket exceptionsnetworking errors

      w="majority":要求得到写操作已经传播到⼤多数具有存储数据具有投票的(data-bearing voting )成员(也就是 members[n].votes 值⼤于0的成员)的确认

    j:要求得到Mongodb的写操作已经写到硬盘⽇志的确认。⽐如:

      j=true:要求得到Mongodb(w指定的实例个数)的写操作已经写到硬盘⽇志的确认。 j=true本身并不保证因为副本集故障⽽不会回滚。

    wtimeout:指定write concern的时间限制,只适⽤于w>1的情况。wtimeout在超过指定时间后写操作会返回error,即使写操作最后执⾏成功,当这些写操作返回时, MongoDB不会撤消在wtimeout时间限制之前执⾏成功的数据修改。如果未指定wtimeout选项且未指定write concern级别,则写⼊操作将⽆限期阻⽌。 指定wtimeout值为0等同于没有wtimeout选项

    将一张表中某个字段的值赋值给另一个字段,可以综合find与update方法,如下:

      修改前数据:  

          

       进行修改:

          

       修改后数据:

          

  四、数据删除:remove

    db.collection.remove(
      <query>,            //query :(可选)删除的⽂档的条件。
      {
        justOne: <boolean>,       //justOne : (可选)如果设为 true 或 1,则只删除⼀个⽂档,如果不设置该参数,或使⽤默认值 false,则删除所有匹配条件的⽂档。
        writeConcern: <document>       //writeConcern :(可选)⽤来指定mongod对写操作的回执⾏为
      }
     )
      

 

 







 

posted on 2022-03-12 22:24  池塘里洗澡的鸭子  阅读(745)  评论(0编辑  收藏  举报