zoukankan      html  css  js  c++  java
  • mongodb 基本命令

    项目中使用到了mongoDB,基本是用RoboMongo连接服务器,做一些权限较低的增删改查操作。命令时常会忘,在此记录一些针对集合的使用频率很高的命令,方便查询:

    1、创建一个聚集集合(table)
    
     db.createCollection(“collName”, {size: 20, capped: 5, max: 100});
    
    2、得到指定名称的聚集集合(table)
    
     db.getCollection("account");
    
    3、得到当前db的所有聚集集合
    
     db.getCollectionNames();
    
    4、显示当前db所有聚集索引的状态
    
     db.printCollectionStats();

    集合的查询:

    1、查询所有记录
    
    db.userInfo.find();
    
    相当于:select* from userInfo;
    
    默认每页显示20条记录,当显示不下的情况下,可以用it迭代命令查询下一页数据。注意:键入it命令不能带“;”
    
    但是你可以设置每页显示数据的大小,用DBQuery.shellBatchSize= 50;这样每页就显示50条记录了。
    
     
    
    2、查询去掉后的当前聚集集合中的某列的重复数据
    
    db.userInfo.distinct("name");
    
    会过滤掉name中的相同数据
    
    相当于:select distict name from userInfo;
    
     
    
    3、查询age = 22的记录
    
    db.userInfo.find({"age": 22});
    
    相当于: select * from userInfo where age = 22;
    
     
    
    4、查询age > 22的记录
    
    db.userInfo.find({age: {$gt: 22}});
    
    相当于:select * from userInfo where age >22;
    
     
    
    5、查询age < 22的记录
    
    db.userInfo.find({age: {$lt: 22}});
    
    相当于:select * from userInfo where age <22;
    
     
    
    6、查询age >= 25的记录
    
    db.userInfo.find({age: {$gte: 25}});
    
    相当于:select * from userInfo where age >= 25;
    
     
    
    7、查询age <= 25的记录
    
    db.userInfo.find({age: {$lte: 25}});
    
     
    
    8、查询age >= 23 并且 age <= 26
    
    db.userInfo.find({age: {$gte: 23, $lte: 26}});
    
     
    
    9、查询name中包含 mongo的数据
    
    db.userInfo.find({name: /mongo/});
    
    //相当于%%
    
    select * from userInfo where name like ‘%mongo%’;
    
     
    
    10、查询name中以mongo开头的
    
    db.userInfo.find({name: /^mongo/});
    
    select * from userInfo where name like ‘mongo%’;
    
     
    
    11、查询指定列name、age数据
    
    db.userInfo.find({}, {name: 1, age: 1});
    
    相当于:select name, age from userInfo;
    
    当然name也可以用true或false,当用ture的情况下河name:1效果一样,如果用false就是排除name,显示name以外的列信息。
    
     
    
    12、查询指定列name、age数据, age > 25
    
    db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
    
    相当于:select name, age from userInfo where age >25;
    
     
    
    13、按照年龄排序
    
    升序:db.userInfo.find().sort({age: 1});
    
    降序:db.userInfo.find().sort({age: -1});
    
     
    
    14、查询name = zhangsan, age = 22的数据
    
    db.userInfo.find({name: 'zhangsan', age: 22});
    
    相当于:select * from userInfo where name = ‘zhangsan’ and age = ‘22’;
    
     
    
    15、查询前5条数据
    
    db.userInfo.find().limit(5);
    
    相当于:selecttop 5 * from userInfo;
    
     
    
    16、查询10条以后的数据
    
    db.userInfo.find().skip(10);
    
    相当于:select * from userInfo where id not in (
    
    selecttop 10 * from userInfo
    
    );
    
     
    
    17、查询在5-10之间的数据
    
    db.userInfo.find().limit(10).skip(5);
    
    可用于分页,limit是pageSize,skip是第几页*pageSize
    
     
    
    18、or与 查询
    
    db.userInfo.find({$or: [{age: 22}, {age: 25}]});
    
    相当于:select * from userInfo where age = 22 or age = 25;
    
     
    
    19、查询第一条数据
    
    db.userInfo.findOne();
    
    相当于:selecttop 1 * from userInfo;
    
    db.userInfo.find().limit(1);
    
     
    
    20、查询某个结果集的记录条数
    
    db.userInfo.find({age: {$gte: 25}}).count();
    
    相当于:select count(*) from userInfo where age >= 20;
    
     
    
    21、按照某列进行排序
    
    db.userInfo.find({sex: {$exists: true}}).count();
    
    相当于:select count(sex) from userInfo;

    索引操作:

    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});
    
    添加的数据的数据列,没有固定,根据添加的数据为准
    
     
    
    2、修改
    
    db.users.update({age: 25}, {$set: {name: 'changeName'}}, false, true);
    
    相当于:update users set name = ‘changeName’ where age = 25;
    
     
    
    db.users.update({name: 'Lisi'}, {$inc: {age: 50}}, false, true);
    
    相当于:update users set age = age + 50 where name = ‘Lisi’;
    
     
    
    db.users.update({name: 'Lisi'}, {$inc: {age: 50}, $set: {name: 'hoho'}}, false, true);
    
    相当于:update users set age = age + 50, name = ‘hoho’ where name = ‘Lisi’;
    
     
    
    3、删除
    
    db.users.remove({age: 132});
    
     
    
    4、查询修改删除
    
    db.users.findAndModify({
    
        query: {age: {$gte: 25}}, 
    
        sort: {age: -1}, 
    
        update: {$set: {name: 'a2'}, $inc: {age: 2}},
    
        remove: true
    
    });

    db.runCommand({ findandmodify : "users", 
    
    
        query: {age: {$gte: 25}}, 
    
    
        sort: {age: -1}, 
    
    
        update: {$set: {name: 'a2'}, $inc: {age: 2}},
    
    
        remove: true
    
    
    });
     


    如果有兴趣可以试试语句块的操作:

    1、简单Hello World
    
    print("Hello World!");
    
    这种写法调用了print函数,和直接写入"Hello World!"的效果是一样的;
    
     
    
    2、将一个对象转换成json
    
    tojson(new Object());
    
    tojson(new Object('a'));
    
     
    
    3、循环添加数据
    
    > for (var i = 0; i < 30; i++) {
    
    ... db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
    
    ... };
    
    这样就循环添加了30条数据,同样也可以省略括号的写法
    
    > for (var i = 0; i < 30; i++) db.users.save({name: "u_" + i, age: 22 + i, sex: i % 2});
    
    也是可以的,当你用db.users.find()查询的时候,显示多条数据而无法一页显示的情况下,可以用it查看下一页的信息;
    
     
    
    4、find 游标查询
    
    >var cursor = db.users.find();
    
    > while (cursor.hasNext()) { 
    
        printjson(cursor.next()); 
    
    }
    
    这样就查询所有的users信息,同样可以这样写
    
    var cursor = db.users.find();
    
    while (cursor.hasNext()) { printjson(cursor.next); }
    
    同样可以省略{}号
    
     
    
    5、forEach迭代循环
    
    db.users.find().forEach(printjson);
    
    forEach中必须传递一个函数来处理每条迭代的数据信息
    
     
    
    6、将find游标当数组处理
    
    var cursor = db.users.find();
    
    cursor[4];
    
    取得下标索引为4的那条数据
    
    既然可以当做数组处理,那么就可以获得它的长度:cursor.length();或者cursor.count();
    
    那样我们也可以用循环显示数据
    
    for (var i = 0, len = c.length(); i < len; i++) printjson(c[i]);
    
     
    
    7、将find游标转换成数组
    
    > var arr = db.users.find().toArray();
    
    > printjson(arr[2]);
    
    用toArray方法将其转换为数组
    
     
    
    8、定制我们自己的查询结果
    
    只显示age <= 28的并且只显示age这列数据
    
    db.users.find({age: {$lte: 28}}, {age: 1}).forEach(printjson);
    
    db.users.find({age: {$lte: 28}}, {age: true}).forEach(printjson);
    
    排除age的列
    
    db.users.find({age: {$lte: 28}}, {age: false}).forEach(printjson);
    
     
    
    9、forEach传递函数显示信息
    
    db.things.find({x:4}).forEach(function(x) {print(tojson(x));});

    另外,Mongodb中也可以使用正则表达式进行查询,之前已经有实例给出:

    db.userInfo.find({name: /mongo/});
    db.userInfo.find({name: /^mongo/});

    //查找包含w3cschool.cc的数据
    >db.posts.find({post_text:{$regex:"w3cschool.cc"}})

    //忽略大小写查找包含w3cschool.cc的数据
    >db.posts.find({post_text:{$regex:"w3cschool.cc",$options:"$i"}})

    更多的可以在实践中不断总结积累。

  • 相关阅读:
    PAT (Advanced Level) 1060. Are They Equal (25)
    PAT (Advanced Level) 1059. Prime Factors (25)
    PAT (Advanced Level) 1058. A+B in Hogwarts (20)
    PAT (Advanced Level) 1057. Stack (30)
    PAT (Advanced Level) 1056. Mice and Rice (25)
    PAT (Advanced Level) 1055. The World's Richest (25)
    PAT (Advanced Level) 1054. The Dominant Color (20)
    PAT (Advanced Level) 1053. Path of Equal Weight (30)
    PAT (Advanced Level) 1052. Linked List Sorting (25)
    PAT (Advanced Level) 1051. Pop Sequence (25)
  • 原文地址:https://www.cnblogs.com/bruceChan0018/p/5826177.html
Copyright © 2011-2022 走看看