1.1 查询出所有数据的指定键(name ,age ,country)

db.persons.find({},{name:1,age:1,country:1,_id:0})

2.查询条件

2.查询条件

2.1查询出年龄在25到27岁之间的学生

db.persons.find({age: {$gte:25,$lte:27},{_id:0,age:1})

2.2查询出所有不是韩国籍的学生的数学成绩

db.persons.find({country:{$ne:”Korea”}},{_id:0,m:1})

3.包含或不包含

$in或$nin

2.3查询国籍是中国或美国的学生信息

db.persons.find({country:{$in:[“USA”,“China”]}})

2.4查询国籍不是中国或美国的学生信息

db.persons.find({country:{$nin:[“USA”,“China”]}})

4.OR查询

$or

2.4查询语文成绩大于85或者英语大于90的学生信息

db.persons.find({$or:[{c:{$gte:85}},{e:{$gte:90}}]},{_id:0,c:1,e:1})

5.Null

把中国国籍的学生上增加新的键sex

db.person.update({country:”China”},{$set:{sex:”m”}},false,true)

2.5查询出sex 等于 null的学生

db.persons.find({sex:{$in:[null]}},{country:1})

6.正则查询

2.6查询出名字中存在”li”的学生的信息

db.persons.find({name:/li/i},{_id:0,name:1})

7.$not的使用

$not可以用到任何地方进行取反操作

2.7查询出名字中不存在”li”的学生的信息

db.persons.find({name:{$not:/li/i}},{_id:0,name:1})

$not和$nin的区别是$not可以用在任何地方儿$nin是用到集合上的

8.数组查询$all和index应用

2.8查询喜欢看MONGOD和JS的学生

db.persons.find({books:{$all:[“MONGOBD”,”JS”]}},{books:1,_id:0})

2.9查询第二本书是JAVA的学习信息

db.persons.find({“books.1”:”JAVA”})

9.查询指定长度数组$size它不能与比较查询符一起使用(这是弊端)

2.8查询出喜欢的书籍数量是4本的学生

db.persons.find({books:{$size:4}},{_id:0,books:1})

2.9查询出喜欢的书籍数量大于3本的学生

1.增加字段size

db.persons.update({},{$set:{size:4}},false,true)

2.改变书籍的更新方式,每次增加书籍的时候size增加1

db.persons.update({查询器},{$push:{books:”ORACLE”},$inc:{size:1}})

3.利用$gt查询

db.persons.find({size:{$gt:3}})

2.10利用shell查询出Jim喜欢看的书的数量

var persons = db.persons.find({name:"jim"})

while(persons.hasNext()){

obj = persons.next();

print(obj.books.length)

}

课间小结

1.mongodb 是NOSQL数据库但是他在文档查询上还是很强大的

2.查询符基本是用到花括号里面的更新符基本是在外面

3.shell是个彻彻底底的JS引擎,但是一些特殊的操作要靠他的

各个驱动包来完成(JAVA,NODE.JS)

10.$slice操作符返回文档中指定数组的内部值

2.11查询出Jim书架中第2~4本书

db.persons.find({name:"jim"},{books:{"$slice":[1,3]}})

2.12查询出最后一本书

db.persons.find({name:"jim"},{books:{"$slice":-1},_id:0,name:1})

11.文档查询

为jim添加学习简历文档 jim.json

2.13查询出在K上过学的学生

1. 这个我们用绝对匹配可以完成,但是有些问题(找找问题?顺序?总要带着score?)

db.persons.find({school:{school:"K",score:"A"}},{_id:0,school:1})

2.为了解决顺序的问题我可以用对象”.”的方式定位

db.persons.find({"school.score":"A","school.school":"K"},{_id:0,school:1})

3.这样也问题看例子:

db.persons.find({"school.score":"A","school.school":”J”},{_id:0,school:1})

同样能查出刚才那条数据,原因是score和school会去其他对象对比

4.正确做法单条条件组查询$elemMatch

db.persons.find({school:{$elemMatch:{school:"K",score:"A"}}})

12.$where

12.查询年龄大于22岁,喜欢看C++书,在K学校上过学的学生信息

复杂的查询我们就可以用$where因为他是万能

但是我们要尽量避免少使用它因为他会有性能的代价

db.persons.find({"$where":function(){

var books = this.books;

var school = this.school;

if(this.age > 22){
var php = null;

for ( var i = 0; i < books.length; i++) {
if(books[i] == "C++"){
php = books[i];

if(school){
for (var j = 0; j < school.length; j++) {

if(school[j].school == "K"){

return true;
}
}
break;
}
}

}
}})

二、分页和排序

1.Limit返回指定的数据条数

1.1查询出persons文档中前5条数据

db.persons.find({},{_id:0,name:1}).limit(5)

2.Skip返回指定数据的跨度

2.1查询出persons文档中5~10条的数据

db.persons.find({},{_id:0,name:1}).limit(5).skip(5)

3.Sort返回按照年龄排序的数据[1,-1]

db.persons.find({},{_id:0,name:1,age:1}).sort({age:1})

注意:mongodb的key可以存不同类型的数据排序就也有优先级

最小值

null

数字

字符串

对象/文档

数组

二进制

对象ID

布尔

日期

时间戳à正则 à最大值

4.Limit和Skip完成分页

4.1三条数据位一页进行分页

第一页àdb.persons.find({},{_id:0,name:1}).limit(3).skip(0)

第二页àdb.persons.find({},{_id:0,name:1}).limit(3).skip(3)

4.2skip有性能问题,没有特殊情况下我们也可以换个思路

对文档进行重新解构设计

每次查询操作的时候前后台传值全要把上次的最后一个文档的日期保存下来

db.persons.find({date:{$gt:日期数值}}).limit(3)

个人建议à应该把软件的中点放到便捷和精确查询上而不是分页的性能上

因为用户最多不会翻查过2页的

三、游标

利用游标遍历查询数据

var persons = db.persons.find();

while(persons.hasNext()){

obj = persons.next();

print(obj.name)

}

2.游标几个销毁条件

1.客户端发来信息叫他销毁

2.游标迭代完毕

3.默认游标超过10分钟没用也会别清除

3.查询快照

快照后就会针对不变的集合进行游标运动了,看看使用方法.

db.persons.find({$query:{name:”Jim”},$snapshot:true})

高级查询选项

$query

$orderby

$maxsan:integer最多扫描的文档数

$min:doc 查询开始

$max:doc 查询结束

$hint:doc 使用哪个索引

$explain:boolean 统计

$snapshot:boolean一致快照

Mongodb 条件查询的更多相关文章

  1. Mongodb条件查询Query的用法

    Query.All("name", "a", "b");//通过多个元素来匹配数组Query.And(Query.EQ("name ...

  2. MongoDB条件查询

    1.查询集合中的所有记录 db.users.find() { "_id" : ObjectId("528b1173613e3289197a6486"), &qu ...

  3. pymongo增删查改以及条件查询

    ---恢复内容开始--- 下载Pymongo pip install pymongo pip install pymongo==x.x.x指定下载版本 连接数据库 from pymongo impor ...

  4. MongoDB 组合多个条件查询($and、$in、$gte、$lte)

    一,问题描述 数据格式: id, timeStamp,count 条件1:查询 某个时间段 内的数据: timeStamp BETWEEN startTime AND endTime.比如 timeS ...

  5. MongoDB入门---文档查询操作之条件查询&and查询&or查询

    经过前几天的学习之路,今天终于到了重头戏了.那就是文档查询操作.话不多说哈,直接看下语法: db.collection.find(query, projection) query :可选,使用查询操作 ...

  6. mongodb多个条件查询in,日期查询,嵌套查询,统计集合总数等常用实例

    1. 多个条件查询in in db.inventory.find( { qty: { $in: [ 5, 15 ] } } ) 2. 日期查询 db.books.find({}) 查询时间大于6-,结 ...

  7. java 实现mongoDB 增加,删除,修改,查看,多条件查询,聚合查询,分组查询(史上最全)

    首先idea创建一手springboot项目 引入如下依赖 <dependency> <groupId>org.mongodb</groupId> <arti ...

  8. mongodb根据字符长度作为条件查询

    { $where:"this.XXX.length==2" } 用$where条件查询,等号要用==.虽说$where查询可能效率不是很好,这只是我能想到的,有更好的方法欢迎指教

  9. TODO:MongoDB的查询更新删除总结

    TODO:MongoDB的查询更新删除总结 常用查询,条件操作符查询,< .<=.>.>=.!= 对应 MongoDB的查询操作符是$lt.$lte.$gt.$gte.$ne ...

随机推荐

  1. IIS与ASP.NET 通信机制深度剖析

    IIS5.X缺点: ISAPI 动态连接库被加载到InetInfo.exe 进程中,它和工作进程之间是一种典型的跨进程通信方式,尽管采用命名管道,但是仍然会带来性能的瓶颈. 所有的 ASP.NET 应 ...

  2. MySQL 数据表修复及数据恢复

    1. MYSQL数据表在什么情况下容易损坏? 服务器突然断电导致数据文件损坏. 强制关机,没有先关闭mysql 服务等.   2. 数据表损坏后的主要现象是什么? 从表中选择数据之时,得到如下错误:I ...

  3. 告诉你GetDC()没有释放造成的后果

    最近做的项目中需要显示视频监控窗口,从采集卡中读到图像的数据,需要实时显示出来,而且速度比较快. 由于比较简单,就直接使用了GDI画图,以前复杂的都用openGL啥的工具了,这次这个简单,就直接用GD ...

  4. redux-simple 简化版的redux

    作为react的粉丝,当然要吐槽一下react组件通信问题.react的单向数据流是组件通信的一大阻碍,只允许父组件向子组件传值,子组件向父组件传值只能通过父组件向子组件传递回调函数实现.如果在深层次 ...

  5. C# 截取字符串,区分中英文情况

    public static string SubstringByCN(string strInput, int begin, int length) { if (!Regex.IsMatch(strI ...

  6. 【插件】WordPress缓存最佳组合:DB Cache Reloaded Fix + Hyper Cache

    DB Cache Reloaded Fix是一个出色的WordPress数据库缓存插件,可以大大减少对数据库的请求次数. Hyper Cache 是非常小巧但很强大的WordPress缓存插件,设置简 ...

  7. 安装SQL Server 那些事儿

    SQL版本: Microsoft SQL Server2008 R2 RTM - Express with Advanced Services 错误描述: System.Configuration.C ...

  8. 开VPN后能上网

    @echo ************************************************************************:start@echo off set /p ...

  9. JQUERY1.9学习笔记 之基本过滤器(一) 动态选择器

    动态选择器:animated Selector 描述:当选择器运行时,选择动态进程中的所有元素.(对动态进程起作用) jQuery( ":animated" ) 注释::anima ...

  10. DIRECTORY_SEPARATOR

    定义 php的内置变量DIRECTORY_SEPARATOR是一个显示系统分隔符的命令,DIRECTORY_SEPARATOR是php的内部常量,不需要任何定义与包含即可直接使用. 2说明   路径分 ...