• mongodb的基本语法(二)


    一、聚集集合查询

    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 (
    select top 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();
    相当于:select top 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、简单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));});
    

    三、官方提供的操作语句对照表:

    上行:SQL 操作语句
    下行:Mongo 操作语句

    CREATE TABLE USERS (a Number, b Number) 
    db.createCollection("mycoll") 
    
    INSERT INTO USERS VALUES(1,1) 
    db.users.insert({a:1,b:1}) 
    
    SELECT a,b FROM users 
    db.users.find({}, {a:1,b:1}) 
    
    SELECT * FROM users 
    db.users.find() 
    
    SELECT * FROM users WHERE age=33 
    db.users.find({age:33}) 
    
    SELECT a,b FROM users WHERE age=33 
    db.users.find({age:33}, {a:1,b:1}) 
    
    SELECT * FROM users WHERE age=33 ORDER BY name 
    db.users.find({age:33}).sort({name:1}) 
    
    SELECT * FROM users WHERE age>33 
    db.users.find({'age':{$gt:33}})}) 
    
    SELECT * FROM users WHERE age<33 
    db.users.find({'age':{$lt:33}})}) 
    
    SELECT * FROM users WHERE name LIKE "%Joe%" 
    db.users.find({name:/Joe/}) 
    
    SELECT * FROM users WHERE name LIKE "Joe%" 
    db.users.find({name:/^Joe/}) 
    
    SELECT * FROM users WHERE age>33 AND age<=40 
    db.users.find({'age':{$gt:33,$lte:40}})}) 
    
    SELECT * FROM users ORDER BY name DESC 
    db.users.find().sort({name:-1}) 
    
    SELECT * FROM users WHERE a=1 and b='q' 
    db.users.find({a:1,b:'q'}) 
    
    SELECT * FROM users LIMIT 10 SKIP 20 
    db.users.find().limit(10).skip(20) 
    
    SELECT * FROM users WHERE a=1 or b=2 
    db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } ) 
    
    SELECT * FROM users LIMIT 1 
    db.users.findOne() 
    
    SELECT DISTINCT last_name FROM users 
    db.users.distinct('last_name') 
    
    SELECT COUNT(*y) FROM users 
    db.users.count() 
    
    SELECT COUNT(*y) FROM users where AGE > 30 
    db.users.find({age: {'$gt': 30}}).count() 
    
    SELECT COUNT(AGE) from users 
    db.users.find({age: {'$exists': true}}).count() 
    
    CREATE INDEX myindexname ON users(name) 
    db.users.ensureIndex({name:1}) 
    
    CREATE INDEX myindexname ON users(name,ts DESC) 
    db.users.ensureIndex({name:1,ts:-1}) 
    
    EXPLAIN SELECT * FROM users WHERE z=3 
    db.users.find({z:3}).explain() 
    
    UPDATE users SET a=1 WHERE b='q' 
    db.users.update({b:'q'}, {$set:{a:1}}, false, true) 
    
    UPDATE users SET a=a+2 WHERE b='q' 
    db.users.update({b:'q'}, {$inc:{a:2}}, false, true) 
    
    DELETE FROM users WHERE z="abc" 
    db.users.remove({z:'abc'});
    

    整理自 脚本之家

  • 相关阅读:
    爬虫练习:使用xpath 下载站长之家简历封面模板
    爬虫练习:Xpath基本使用
    爬虫练习:使用xpath爬取彼岸图网美女图
    爬虫练习:使用re模块爬取 糗图百科 图片
    爬虫练习:使用bs4爬取诗词名句网的《三国演义》
    爬虫练习:BS4基本使用
    爬虫练习:使用requests模块 爬取化妆品生产许可信息管理系统服务平台
    爬虫练习:贴吧 https://tieba.baidu.com/f?kw=友谊已走到尽头
    爬虫练习:使用 bs4以及正则,urllib.request 爬取 豆瓣TOP250爬虫
    记录kettle错误:无法从套接字读取更多数据 / TNS包错误
  • 原文地址:https://www.cnblogs.com/zjfjava/p/7507789.html
Copyright © 2020-2023  润新知