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. C#操作Excel(NPOI)

    这两天需要读取Excel文件,网上找了找,发现NPOI用的是最多的,于是研究了一下.这里大概介绍一下. 首先,在NPOI中一个Excel文件对应了一个IWorkbook对象,Excel中的一个工作表对 ...

  2. mysql慢查优化总结

    1.优化sql语句结构 or改成union,使用start,limit 先只查询出所有的id,然后再排序.如果查询出所有的id仍然很慢,就要仔细考虑了. 2.添加索引 mysql每次查询只能使用一个索 ...

  3. Cors 跨域Access-Control-Allow-Origin

    1.Access-Control-Allow-Origin 指定格式 The Origin header field has the following syntax: origin = " ...

  4. linux RedHat 5 更新vim.

    概述: 想装 ctags,装不上.看到老外有篇日志,是在vi 7.2版本上运行.怕是vi版本的原因,于是想升级,网上升级的方法写得少,有的写的太无语了,只有他自己看得懂.这里,简单说下.搞半天了,终于 ...

  5. Windows Server 2003 SP2 R2 企业版/标准版/32与64位 CD-KEY

    微软发布Windows Server 2003 R2版的目的是希望透过它填补Windows Server 2003 SP1和Longhorn Server之间的产品发布时间间隔.所以Windows S ...

  6. RBAC角色权限控制

    RBAC角色权限控制 1. user (用户表) *  用户的基本信息(mid:用户信息id  如图) 2. node (节点表) * 页面(模块\控制器\方法) 3. role_node(角色.节点 ...

  7. pydev新工程

    http://www.cnblogs.com/linjiqin/p/3595891.html 明天再编辑一下

  8. Eclipse自动生成文档注释

    /** *这种格式的注释就是文档注释 */ 快捷键是alt+shift+j,将光标放在类名,变量名,方法名上,按快捷键.

  9. class类名的管理

    var a=document.querySelector(".div1"); a.classList.remove("div2");//减掉一个 a.class ...

  10. 【C++学习之路】派生类的构造函数(三)

    三.多层继承的派生类 1.多层继承的派生类只需在构造函数的初始化列表中写出直接基类的构造函数即可 class student { public: student(int n, string nam) ...