MongoDB的基础查询和索引操作方法总结
来源:互联网 发布:国外语音聊天软件 编辑:程序博客网 时间:2024/05/20 00:53
查询操作
http://www.jb51.net/article/87983.htm
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);
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:4-MongoDB的索引和查询分析(explain)
- MongoDB查询、索引和聚合
- mongoDB常见的查询索引
- MongoDB 常见的查询索引
- Mongodb的简单操作方法
- MongoDB范围查询的索引优化
- MongoDB范围查询的索引优化
- MongoDB范围查询的索引优化
- MongoDB范围查询的索引优化
- MongoDB的索引与查询优化
- 总结-DOM的操作方法和知识点
- MongoDB数据模型和索引学习总结
- MongoDB总结(二):mongoDB的索引、备份和恢复、固定集合及数据库安全
- 对MongoDB设计模式的理解和常用查询总结
- ThinkPHP下MongoDB的操作方法
- Mongodb数据库的基本操作方法
- MongoDB基础学习二----MongoDB中常用的索引操作
- 自定义View,绘制一个圆形,并可以单击拖动
- hdu 6069 素数
- C
- 【ubuntu】The "android" command is deprecated.
- operating system not found
- MongoDB的基础查询和索引操作方法总结
- 思维导图
- 13、句子逆序
- [AirFlow]AirFlow使用指南四 DAG Operator Task
- 时间复杂度和空间复杂度详解
- poj 3660 弗洛伊德算法的巧妙改变。
- STM32启动BOOT0 BOOT1设置方法
- 第一篇博客
- I2C总线的使用 --- EEPROM 存储器使用