• 4.MongoDB命令语法基本使用


    Shell

    Mongo shell是基于JavaScript语法的,MongoDB使用了SpiderMonkey作为其内部的JavaScript解释器引擎,这是由Mozilla官方提供的JavaScript内核解释器,该解释器也被同样用于大名鼎鼎的Firefox浏览器产品之中。SpiderMonkey对ECMA Script标准兼容性非常好,可以支持ECMA Script 6。

    数据库操作

    #下面一系列操作需先通过如下命令进入shell,
    ./mongo --port 27017 --shell
    #27017端口是默认值,如果没改,可不写,改了必须加上
    
    • 查看

      show dbs #查看所有库
      
    • 切换\创建

      use my_db #切换数据库,数据库不存在则创建,创建后必须创建表才会通过show dbs 查出
      
    • 删除

      db.dropDatabase()#use哪个库,就删哪个
      

    集合(等同MySql中table)操作

    #下面一系列操作需先通过如下命令进入shell,
    ./mongo --port 27017 --shell
    #27017端口是默认值,如果没改,可不写,改了必须加上
    
    • 查看(两种方式)

      show tables
      show collections
      
    • 创建

      db.createCollection("my_table")
      #直接通过下方插入文档命令,也可创建集合
      
    • 删除

      db.my_table.drop()
      #my_table是创建的集合名称
      
    • 创建集合参数

      db.createCollection(name,options)
      

      options参数

      image-20220316223128518

    文档(等同于MySql一行数据)操作

    新增(一条、多条)

    1. 通过命令
     db.my_table.insertOne({"name":"inserOne"})#插入一条
     db.my_table.insert({"name":"insert"}) #插入一条
     db.my_table.save({"name":"save"})#插入一条
     db.my_table.insertMany([{"name":"inserMany_1"},{"name":"inserMany_2"}])#插入多条 
     #insertOne&insertMany官方推荐使用,返回值更详细
     #my_table是集合名,不存在自动创建
    
    1. 通过JS脚本

      • 创建批量插入js
      var dataArr=[]; 
      for(var i=0;i<100;i++){
      	var data={
      		batch_index:i,
      		batch_name:"batch_name_"+i,
      	}
      	dataArr.push(data);
      }
      db.batch_table.insertMany(dataArr);
      
      • 进入mongoDb shell,执行

        load("/usr/local/mongodb/config/batchInsert.js")
        #我把刚创建的js文件放到config目录了
        

    查询(查全部、条件查询、分页、模糊查询、指定返回结果列、排序)

    • 查询全部

      db.batch_table.find()
      #batch_table为创建的集合名,默认显示20条,通过"it"查看更多
      
    • 查询第一条记录

      db.batch_table.findOne()
      #batch_table为创建的集合名
      
    • 条件查询

      db.batch_table.find({batch_index:19})
      #将batch_index:19的匹配数据查出
      db.batch_table.find({_id: ObjectId("6232a63131a4945b90caea02")})
      #根据id查
      db.batch_table.find({batch_index:{$gt:17},batch_name:"batch_name_37"})
      #根据batch_index>17并且 batch_name=batch_name_37 的记录
      

      附:查询条件字典

      image-20220317114951699

    • 排序

      db.batch_table.find().sort({batch_index:-1})
      #根据batch_index排序
      # 1 (for ascending) 
      #-1 (for descending)
      
    • 分页

      db.batch_table.find().skip(10).limit(5)
      #从第10条(>=)开始,查询五条记录
      
    • 模糊查询

      db.batch_table.find({batch_name:/_1/})
      db.batch_table.find({batch_name包含“_1”的:{$regex:"_1"})
      #模糊查找batch_name包含“_1”的
      
    • 指定查询出某些列(类似不用select *的意思)

      db.batch_table.find({},{batch_index:false,batch_name:false})
      db.batch_table.find({},{batch_index:0,batch_name:0})
      #指定列如果没有查询条件,必须加空的{}
      #第二个参数为要查询出的列名
      #列名参数必须要么都是true,要么都是false
      #false:不返回 true:返回
      #false=1,true=0
      

    修改

    • 根据条件更改

      db.batch_table.update({"_id" : ObjectId("6232a63131a4945b90cae9ef")},{ "batch_name" : "update_batch_name_0"})
      #上面命令会将匹配到的文档完全更新为新的结构
      #部分字段更新、删除具体规则见下方
      

      附:更新命令字典

      db.collection.update(query,update,options)
      #query:描述更新的查询条件;
      #update:描述更新的动作及新的内容;
      #options:描述更新的选项
          #upsert:可选,如果不存在update的记录,是否插入新的记录。默认false,不插入
          #multi:可选,是否按条件查询出的多条记录全部更新。默认false,只更新找到的第一条记录
          #writeConcern :可选,决定一个写操作落到多少个节点上才算成功。
      

      image-20220317140031216

    • 更新并获得返回值

       db.batch_table.findAndModify({query:{"_id" : ObjectId("6232a63131a4945b90cae9ef")},update:{$set:{newfield:1}}})
       #将对应数据列新增一列,并返回更新前的文档信息
        db.batch_table.findAndModify({query:{"_id" : ObjectId("6232a63131a4945b90cae9ef")},update:{$set:{newfield:1}},new:true})
      #加上“new:true”hou ,将对应数据列新增一列,并返回更新后的文档信息
      #findOneAndUpdate:更新单个文档并返回更新前(或更新后)的文档。
      #findOneAndReplace:替换单个文档并返回替换前(或替换后)的文档。
      
    • 其他

      #update命令的选项配置较多,为了简化使用还可以使用一些快捷命令:
      updateOne:更新单个文档。
      updateMany:更新多个文档。
      replaceOne:替换单个文档。
      

      更多语法见官方

    删除

    • remove

      1.批量删除

      db.batch_table.remove({"batch_name" : "update_batch_name_1"})
      #根据匹配到的数据删除
      #db.batch_table.remove({batch_name:“update_batch_name_1”})// batch_name 等于update_batch_name_1的记录
      #db.batch_table.remove({}) // 删除所有记录
      #db.batch_table.remove() //报错
      
      1. 删除一个

        db.batch_table.remove({"batch_name" : "update_batch_name_1"},true)
        #删除满足条件的首条记录
        
    • delete

      官方推荐使用 deleteOne() 和 deleteMany() 方法删除文档,语法格式如下:

      db.batch_table.deleteMany ({}) //删除集合下全部文档
      db.batch_table.deleteMany ({"batch_name" : "update_batch_name_1"}) //删除匹配的全部文档
      db.batch_table.deleteOne ({"batch_name" : "update_batch_name_1"}) //删除 匹配到 的一个文档
      #都是顺序删除,不可选择头还是尾删除
      

      注意: remove、deleteMany等命令需要对查询范围内的文档逐个删除,如果希望删除整个集合,则使 用drop命令会更加高效

    • 删除并获得返回值

      findOneAndDelete(可做队列)

      db.batch_table.findOneAndDelete((({batch_index:{$lt:5}})))
      #删除后会获得删除的文档
      db.batch_table.findOneAndDelete({batch_index:{$lt:10}},{sort:{batch_index:-1}})
      #根据sort定义,是从头开始删还是从尾开始删,可以做队列了
      
  • 相关阅读:
    Android中内容观察者的使用 ContentObserver类详解 (转)
    Spinner
    对话框
    ButtonBar 的使用
    EditText/RadioButton/CheckBox使用
    ListView
    PieChar,此代码参考网上
    ComboBox中使用事件
    ColorPicker
    Button
  • 原文地址:https://www.cnblogs.com/rb2010/p/16048712.html
Copyright © 2020-2023  润新知