zoukankan      html  css  js  c++  java
  • MongoDB常用操作

    1.查看帮助命令

      help

      db.yourColl.help();

      db.youColl.find().help();

      db.help():显示数据库操作命令,里面有很多的命令 

      db.foo.help():显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 

      rs.help();

    2.查看数据库相关信息

      show dbs:显示数据库列表 
      show collections:显示当前数据库中的集合(类似关系数据库中的表) 
      show users:显示用户

    3.对集合的插入,查找

      db.foo.insert({aa:11})

      db.foo.find() 查找所有记录

      db.foo.find( { a : 1 } ):对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

    4.切换数据库

       use <db name>:切换当前数据库,这和MS-SQL里面的意思一样 

       如:如果你想创建一个“myTest”的数据库,先运行use myTest命令,之后就做一些操作(如:db.createCollection('user')),这样就可以创建一个名叫“myTest”的数据库。

    5.删除数据库

       db.dropDatabase();

    6.从指定主机上克隆数据库

       db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库

    7.从指定的机器上复制指定数据库数据到某个数据库

       db.copyDatabase("mydb", "myTest", "127.0.0.1");将本机的mydb的数据复制到myTest数据库中

    8.修复当前数据库

       db.repairDatabase();

    9.查看当前使用的数据库

       db.getName();

       db和db.getName()方法是一样的效果,都可以查询当前使用的数据库

    10.显示当前db状态

       db.stats(); 

    11.当前db版本

       db.version(); //3.0.2

    12、查看当前db的链接机器地址

       db.getMongo(); 

    Collection聚集集合相关操作

    1、创建一个聚集集合(table)

      db.createCollection(“collName”, {size: 20, capped: 5, max: 100});

    2、得到指定名称的聚集集合(table)

      db.getCollection("account"); //列出指定名字的集合,如:myTest.foo

    3、得到当前db的所有聚集集合

      db.getCollectionNames(); //列出所有聚集集合的名,如:["foo","user","stu"]

    4、显示当前db所有聚集索引的状态

      db.printCollectionStats(); //打印出所有集合的状态信息

    用户操作

    1.创建用户

    use admin 
    db.createUser( 
      { 
        user: "adminUserName", 
        pwd: "userPassword", 
        roles: 
        [ 
          { 
            role: "userAdminAnyDatabase", 
            db: "admin"
          } 
        ] 
      } 
    )

    role:可用的角色有:"dbOwner","userAdminAnyDatabase","root","read","userAdmin"等

    2.删除用户

    use test
    db.system.users.remove({user:"test"});
    或者
    db.dropUser("test")
    db.removeUser("userName");

    3.数据库认证、安全模式

       db.auth("userName", "123123");

    其他
    1、查询之前的错误信息
       db.getPrevError();
    2、清除错误记录
       db.resetError();
     
    对聚集集合的信息的查看(相当于是对表的信息的查看)
    1. db.yourColl.help(); //查看可以操作集合的方法,命令

    2. db.yourColl.count(); //当前集合的数据条数

    3. db.userInfo.dataSize(); //数据空间大小

    4. db db.userInfo.getDB(); //当前聚集集合所在的db

    5. db.userInfo.stats(); //当前聚集的状态

    6. db.userInfo.totalSize(); //聚集集合总大小

    7. db.userInfo.storageSize(); //储存空间大小

    8. db.userInfo.getShardVersion() //Shard版本信息

    9. db.userInfo.renameCollection("users"); //将userInfo重命名为users

    10.db.userInfo.drop(); //删除当前聚集集合

    对聚集集合的数据查询

    1. db.user.find() ; //默认查询20条

    DBQuery.shellBatchSize= 50; //设置每页显示50条
    如果还有数据没有显示完,可用键入“it”命令,迭代查询后续记录。

    2. db.userInfo.distinct("name");
    //相当于select distict name from userInfo;

    3.db.userInfo.find({"age": 22}) //查询age作为key,值为22的记录,可以不加""
    //相当于: select * from userInfo where age = 22;

    4. db.userInfo.find({age: {$gt: 22}});
    //相当于:select * from userInfo where age >22;

    5. db.userInfo.find({age: {$lt: 22}});
    //相当于:select * from userInfo where age <22;

    //注:查询条件中,操作符和条件值放在一个对象中,如{age: {$lt: 22}};而在更新数据中,列名和数据放在一个对象中,如{$set : {name: "zhangshan"}},而or查询又比较特殊,它有点类似于更新操作
    //如
    {$or: [{age: 22}, {age: 25}]},它这里给的是对象数组
    6.db.userInfo.find({age: {$gte: 23, $lte: 26}});
    //查询age >= 23 并且 age <= 26

    7.db.userInfo.find({name: /mongo/});
    //模糊查找,相当于'%%'

    8.db.userInfo.find({name: /^mongo/});
    //模糊查找,name的值必须是以mongo开头,相当于'mongo%'

    //注:find()方法中的第一个对象是查询条件;第二个对象是指定显示的列名,1和true代表显示,0和false代表去除这一列,其余列全部显示,也就是说,如果指定name:false,那么就不能再指定显示其它列,如age:1,否则,将报错
    9.db.userInfo.find({}, {name: 1, age: 1});  
    //相当于:select name, age from userInfo where age >25;

    10.db.userInfo.find({name: 'zhangsan', age: 22});
    //相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’

    11.db.userInfo.find().limit(5); //查询前5条数据

    12.db.userInfo.find().skip(10); //skip()表示跳过,也就是说跳过前10条记录

    13.db.userInfo.find().limit(10).skip(5); //从第5条记录后,查询出10条记录,可用于分页,limit是pageSize,skip是第几页*pageSize
    14.db.userInfo.find({$or: [{age: 22}, {age: 25}]});
    //相当于:select * from userInfo where age = 22 or age = 25;
    15.db.userInfo.findOne();  //查询第一条数据
    16.db.userInfo.find({age: {$gte: 25}}).count();  //统计记录条数

    17.db.userInfo.find({sex: {$exists: true}}).count(); //统计存在sex列的记录数,可以同时指定多个存在的列

    排序

    1.升序:db.userInfo.find().sort({age: 1});
    2.降序:db.userInfo.find().sort({age: -1});

    注:排序这里只能使用1和-1.不能使用true和false


    索引
    1、创建索引
    db.userInfo.ensureIndex({name: 1});
    db.userInfo.ensureIndex({name: 1, ts: -1});
    2、查询当前聚集集合所有索引
    db.userInfo.getIndexes();
    3、查看总索引记录大小
    db.userInfo.totalIndexSize();
    4、读取当前集合的所有index信息
    db.users.reIndex();
    5、删除指定索引
    db.users.dropIndex("name_1"); 
    6、删除所有索引索引
    db.users.dropIndexes();

    增、删、改

    1.添加
    db.users.save({name: ‘zhangsan’, age: 25, sex: true}); //可以随意添加列
    db.users.insert({name:'22',age:22})

    2.修改
    db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true); //前面一个对象是查询条件,后面一个对象是要修改的列

    db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true); //在原有的基础上增加
    //
    相当于:update users set age = age + 50 where name = ‘Lisi’;


    3.删除
    db.users.remove({age: 132}); //删除age=132的记录

    4.按条件删除(也就是先查出来,排好序再删除
    db.users.findAndModify({
        query: {age: {$gte: 25}}, 
        sort: {age: -1}, 
        update: {$set: {name: 'a2'}, $inc: {age: 2}},
        remove: true,
       new : true  
    }); 
    db.runCommand({ findandmodify : "users", 
        query: {age: {$gte: 25}}, 
        sort: {age: -1}, 
        update: {$set: {name: 'a2'}, $inc: {age: 2}},
        remove: true
    });
    注:1.remove和update两个必须指定一个
    2.不是对查询到的所有数据都更新或删除,而是对第一个记录更新或删除
    3.若没有指定new:true,则返回修改前的对象,若指定了new:true,则返回修改后的对象
    4.若为remove操作,则返回被删除的对象,不能指定new:true,否则,将报错。
    5.若没有查询到数据,则返回null
    语句块操作  

    注:语法类似c和javascript,java,区分大小写
    1.打印输出语句
    print("Hello World!");

    2.将一个对象转换成json
    tojson(new Object())  //打印一个空对象,不是null, 而是{}
    tojson(new Object({name:"zhang",age:22})) // {"name":"zhang","age":22}

    3.循环插入
    for (var i = 0; i < 30; i++) {
        db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
    };

    4.遍历查询结果

    1).游标
    var cursor = db.users.find(); //游标
     while (cursor.hasNext()) { 
        printjson(cursor.next()); 
    }

    注:游标,也可以当作数组来使用
    例如:cursor[4];

    获取数组的长度:cursor.length()或cursor.count()
    for (var i = 0, len = c.length(); i < len; i++)
    printjson(c[i]);  

    2).forEach循环
    db.users.find().forEach(printjson);
    forEach中必须传递一个函数来处理每条迭代的数据信息

    向forEach()传递自定义函数
    db.users.find({age:24}).forEach(function(x) {print(tojson(x));});

    5.把游标转换成数组
     var arr = db.users.find().toArray();
     printjson(arr[2]);










    
    



     
  • 相关阅读:
    服务部署 RPC vs RESTful
    模拟浏览器之从 Selenium 到splinter
    windows程序设计 vs2012 新建win32项目
    ubuntu python 安装numpy,scipy.pandas.....
    vmvare 将主机的文件复制到虚拟机系统中 安装WMware tools
    ubuntu 修改root密码
    python 定义类 简单使用
    python 定义函数 两个文件调用函数
    python 定义函数 调用函数
    python windows 安装gensim
  • 原文地址:https://www.cnblogs.com/yangwenbin/p/4449495.html
Copyright © 2011-2022 走看看