• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MongoDB的基础查询和索引操作方法总结

    查询操作

    1、查询所有记录

    db.userInfo.find();
    
    

    相当于:

    select* from userInfo;
    

    2、查询去掉后的当前聚集集合中的某列的重复数据

    db.userInfo.distinct("name");

    会过滤掉name中的相同数据

    相当于:

    select disttince 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}});
    
    

    相当于:

    select * from userInfo where age = 25;
    

    8、查询age >= 23 并且 age = 26

    db.userInfo.find({age: {$gte: 23, $lte: 26}});
    
    

    相当于:

    select * from userInfo where age >=23 and age = 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、查询前5条数据

    db.userInfo.find().limit(5);
    
    

    相当于:

    select * from (select * from userInfo) where rownum  6;//oracle
    
    select * from userInfo limit 5;//mysql
    
    

    15、查询10条以后的数据

    db.userInfo.find().skip(10);
    
    

    相当于:

    select * from userInfo where id not in (select id from (select * from userInfo) where  and rownum 11);

    16、查询在5-10之间的数据
    db.userInfo.find().limit(10).skip(5);
    

    可用于分页,limit是pageSize,skip是第几页*pageSize

    17、or与 查询

    db.userInfo.find({$or: [{age: 22}, {age: 25}]});
    
    

    相当于:

    select * from userInfo where age = 22 or age = 25;
    

    18、查询第一条数据

    db.userInfo.findOne();
    
    db.userInfo.find().limit(1);
    
    

    相当于:

    select * from (select * from userInfo) where and rownum  2
    

    19、查询某个结果集的记录条数

    db.userInfo.find({age: {$gte: 25}}).count();
    
    相当于:select count(*) from userInfo where age >= 20;
    
    


    索引

    1、创建索引

    db.userInfo.ensureIndex({username: 1});
    

    在MongoDB中,我们同样可以创建复合索引,如下:

    db.userInfo.ensureIndex({username: 1, age: -1});
    

    该索引被创建后,基于username和age的查询将会用到该索引,或者是基于username的查询也会用到该索引,但是只是基于age的查询将不会用到该复合索引。因此可以说,如果想用到复合索引,必须在查询条件中包含复合索引中的前N个索引列。然而如果查询条件中的键值顺序和复合索引中的创建顺序不一致的话,MongoDB可以智能的帮助我们调整该顺序,以便使复合索引可以为查询所用。如:

    db.test.find({"age": 30, "username": "stephen"})
    

    对于上面示例中的查询条件,MongoDB在检索之前将会动态的调整查询条件文档的顺序,以使该查询可以用到刚刚创建的复合索引。

    2、创建唯一索引

    在缺省情况下创建的索引均不是唯一索引。下面的示例将创建唯一索引,如:

    db.test.ensureIndex({"userid":1},{"unique":true})
    

    如果再次插入userid重复的文档时,MongoDB将报错,以提示插入重复键,如:

    db.test.insert({"userid":5})
    
    db.test.insert({"userid":5})
    
    
    E11000 duplicate key error index: test.test.$userid_1 dup key: { : 5.0 }
    

    如果插入的文档中不包含userid键,那么该文档中该键的值为null,如果多次插入类似的文档,MongoDB将会报出同样的错误,如:

    db.test.insert({"userid1":5})
    
    db.test.insert({"userid1":5})
    
    
    E11000 duplicate key error index: test.test.$userid_1 dup key: { : null }
    

    如果在创建唯一索引时已经存在了重复项,我们可以通过下面的命令帮助我们在创建唯一索引时消除重复文档,仅保留发现的第一个文档,如:

    --先删除刚刚创建的唯一索引。

    db.test.dropIndex({"userid":1})
    
    

    --插入测试数据,以保证集合中有重复键存在。

    db.test.remove()
    
    db.test.insert({"userid":5})
    
    db.test.insert({"userid":5})
    
    

    --创建唯一索引,并消除重复数据。

    db.test.ensureIndex({"userid":1},{"unique":true,"dropDups":true})
    
    

    --查询结果确认,重复的键确实在创建索引时已经被删除。

    db.test.find()
    
    { "_id" : ObjectId("4fe823c180144abd15acd52e"), "userid" : 5 }
    
    

    我们同样可以创建复合唯一索引,即保证复合键值唯一即可。如:

    db.test.ensureIndex({"userid":1,"age":1},{"unique":true})
    

    3、查询当前聚集集合所有索引

    db.userInfo.getIndexes();
    

    4、查看总索引记录大小

    db.userInfo.totalIndexSize();
    

    5、读取当前集合的所有index信息

    db.users.reIndex();
    

    6、删除指定索引

    db.users.dropIndex("username":1);
    

    7、删除所有索引索引

    db.users.dropIndexes();
    
    

    您可能感兴趣的文章:
    • MongoDB索引使用详解
    • MongoDB中唯一索引(Unique)的那些事
    • MongoDB中创建索引需要注意的事项
    • MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划
    • 深入理解MongoDB的复合索引
    • mongodb处理中文索引与查找字符串详解
    • MongoDB查询字段没有创建索引导致的连接超时异常解案例分享
    • 关于MongoDB索引管理-索引的创建、查看、删除操作详解
    • MongoDB自动删除过期数据的方法(TTL索引)
    • 关于对MongoDB索引的一些简单理解
    上一篇:MongoDB的mongo shell常用操作方法及操作脚本笔记
    下一篇:Mongodb自增id实现方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MongoDB的基础查询和索引操作方法总结 MongoDB,的,基础,查询,和,