MongoDB

作者: 韩小强 | 来源:发表于2018-01-18 10:31 被阅读0次

    回顾mongodb。

    1. 启动
      控制台输入mongodb,返回如下内容
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten] MongoDB starting : pid=18348 port=27017 dbpath=C:\data\db\ 64-bit host=GCX-HanChengQiang
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten] targetMinOS: Windows 7/Windows Server 2008 R2
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten] db version v3.4.4
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten] git version: 888390515874a9debd1b6c5d36559ca86b44babd
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1u-fips  22 Sep 2016
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten] allocator: tcmalloc
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten] modules: none
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten] build environment:
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten]     distmod: 2008plus-ssl
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten]     distarch: x86_64
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten]     target_arch: x86_64
    2018-01-16T13:58:32.680+0800 I CONTROL  [initandlisten] options: {}
    2018-01-16T13:58:32.681+0800 W -        [initandlisten] Detected unclean shutdown - C:\data\db\mongod.lock is not empty.
    2018-01-16T13:58:32.681+0800 I -        [initandlisten] Detected data files in C:\data\db\ created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
    2018-01-16T13:58:32.681+0800 W STORAGE  [initandlisten] Recovering data from the last clean checkpoint.
    2018-01-16T13:58:32.681+0800 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=3538M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
    2018-01-16T13:58:33.237+0800 I CONTROL  [initandlisten]
    2018-01-16T13:58:33.237+0800 I CONTROL  [initandlisten] ** WARNING: Access control is not enabled for the database.
    2018-01-16T13:58:33.237+0800 I CONTROL  [initandlisten] **          Read and write access to data and configuration is unrestricted.
    2018-01-16T13:58:33.237+0800 I CONTROL  [initandlisten]
    2018-01-16T13:58:33.382+0800 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory 'C:/data/db/diagnostic.data'
    2018-01-16T13:58:33.383+0800 I NETWORK  [thread1] waiting for connections on port 27017
    2018-01-16T13:58:33.688+0800 I NETWORK  [thread1] connection accepted from 127.0.0.1:56218 #1 (1 connection now open)
    2018-01-16T13:58:33.688+0800 I NETWORK  [thread1] connection accepted from 127.0.0.1:56219 #2 (2 connections now open)
    2018-01-16T13:58:33.690+0800 I NETWORK  [thread1] connection accepted from 127.0.0.1:56220 #3 (3 connections now open)
    2018-01-16T13:58:34.004+0800 I FTDC     [ftdc] Unclean full-time diagnostic data capture shutdown detected, found interim file, some metrics may have been lost. OK
    

    2.新开窗口,输入mongo,数据库连接成功

    MongoDB shell version v3.4.4
    connecting to: mongodb://127.0.0.1:27017
    MongoDB server version: 3.4.4
    

    3.数据库操作

    use -数据库名                                           //创建/切换数据库
    show-dbs                                                  //查看全部数据库列表
    db                                                              //显示当前数据库  默认是test
    db.dropDatabase()                                  //先当前数据库下执行,删除当前数据库
    db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean>, size: <number>, max <number>})
    //name: 集合名称
    //capped:是否启用集合限制,如果开启需要制定一个限制条件,默认为不启用,这个参数没有实际意义
    //max:集合中最大条数限制,默认为没有限制
    //size:限制集合使用空间的大小,默认为没有限制,size的优先级比max要高
    //autoIndexId:是否使用_id作为索引,默认为使用(true或false)
    

    4.集合操作

    db.collection.drop()                                          //删除集合
    

    5.文档操作

    • 新增
    db.collection.insert({"name": "a","age":"b"})     //向集合插入一条数据(文档)
    
    • 修改
    db.collection.update(                                   //修改文档
       <query>,
       <update>,
       {
         upsert: <boolean>,
         multi: <boolean>,
         writeConcern: <document>
       }
    )
    //query : update的查询条件,类似sql update查询内where后面的。
    //update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
    //upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
    //multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
    //writeConcern :可选,抛出异常的级别。
    
     db.collection.save(                           //替换文档
       <document>,
       {
         writeConcern: <document>
       }
    )
    //document : 文档数据。
    //writeConcern :可选,抛出异常的级别。
    
    • 删除
    db.collection.remove(                       //删除文档
       <query>,
       {
         justOne: <boolean>,
         writeConcern: <document>
       }
    //query :(可选)删除的文档的条件。
    //justOne : (可选)如果设为 true 或 1,则只删除一个文档。
    //writeConcern :(可选)抛出异常的级别。
    
    db.col.remove({})                           //清空集合 "col" 的数据
    
    • 查询
    db.collection.find(query, projection).pretty()       查询文档
    db.collection.findOne()                                      查询一个文档
    query :可选,使用查询操作符指定查询条件
    projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)
    pretty() 方法以格式化的方式来显示所有文档。
    
    补充一下 projection 参数的使用方法
    db.collection.find(query, projection)
    
    若不指定 projection,则默认返回所有键,指定 projection 格式如下,有两种模式
    
    db.collection.find(query, {title: 1, by: 1})   // inclusion模式 指定返回的键,不返回其他键
    db.collection.find(query, {title: 0, by: 0})   // exclusion模式 指定不返回的键,返回其他键
    
    _id 键默认返回,需要主动指定 _id:0 才会隐藏
    两种模式不可混用(因为这样的话无法推断其他键是否应返回) 错误
    db.collection.find(query, {title: 1, by: 0}) 
    
    只能全1或全0,除了在inclusion模式时可以指定_id为0  正确
    db.collection.find(query, {_id:0, title: 1, by: 1})      
    
    1. MongoDB 的条件语句查询:
    • AND 和 OR 联合使用(and用","表示,OR用"$or"表示)
    操作 格式 范例 RDBMS中的类似语句
    等于 {<key>:<value>} db.col.find({"by":"菜鸟教程"}).pretty() where by = '菜鸟教程'
    小于 {<key>:{$lt:<value>}} db.col.find({"likes":{$lt:50}}).pretty() where likes < 50
    小于或等于 {<key>:{$lte:<value>}} db.col.find({"likes":{$lte:50}}).pretty() where likes <= 50
    大于 {<key>:{$gt:<value>}} db.col.find({"likes":{$gt:50}}).pretty() where likes > 50
    大于或等于 {<key>:{$gte:<value>}} db.col.find({"likes":{$gte:50}}).pretty() where likes >= 50
    不等于 {<key>:{$ne:<value>}} db.col.find({"likes":{$ne:50}}).pretty() where likes != 50
    类似常规 SQL 语句为: 'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'
    
    db.col.find({"likes": {$gt:50}, $or: [{"by": "菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()
    {
            "_id" : ObjectId("56063f17ade2f21f36b03133"),
            "title" : "MongoDB 教程",
            "description" : "MongoDB 是一个 Nosql 数据库",
            "by" : "菜鸟教程",
            "url" : "http://www.runoob.com",
            "tags" : [
                    "mongodb",
                    "database",
                    "NoSQL"
            ],
            "likes" : 100
    }
    
    • $type 操作符
    类型 数字 备注
    Double 1
    String 2
    Object 3
    Array 4
    Binary data 5
    Undefined 6 已废弃。
    Object id 7
    Boolean 8
    Date 9
    Null 10
    Regular Expression 11
    JavaScript 13
    Symbol 14
    JavaScript (with scope) 15
    32-bit integer 16
    Timestamp 17
    64-bit integer 18
    Min key 255 Query with -1.
    Max key 127
     使用方式
    db.col.find({"title" : {$type : 2}})        //选择类型对应的数字进行查询
    
    • Link与Skip方法
    db.collection_name.find().limit(number)  
    limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
    
    db.collection_name.find().limit(number).skip(number)
    skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
    
    两者结合可以实现简单分页功能
    这里我们假设查询第100001条数据,这条数据的Amount值是:2399927,我们来写两条语句分别如下:
    b.test.sort({"amount":1}).skip(100000).limit(10)                                   //183ms
    db.test.find({amount:{$gt:2399927}}).sort({"amount":1}).limit(10)       //53ms
    以上是不同写法之间的性能对比
    
    • 排序-sort方法
    db.collection_name.find().sort({key:1}) 
    key文件的键名称
    sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
    

    相关文章

      网友评论

          本文标题:MongoDB

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