此为项目中实际用到的例子
假设有User表
#<User _id: 5497793c73616e2a0c010000, created_at: "2014-12-22T01:51:56.170Z", updated_at: "2015-01-06T03:36:52.689Z", avatar: "2014.png", encrypted_password: “ 23456", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: "2014-12-22T01:48:49.428Z", sign_in_count: 1451, current_sign_in_at: "2014-12-24T02:04:15.075Z", last_sign_in_at: "2014-12-24T02:04:15.055Z",  authentication_token: "838PySjM", auth_admin_token: "6kgsWsAFg", name: “ 3221", phone: "16812708279", birthday: "2003-12-22", gender: "male", tags: [], city: nil, works: nil, constellation: "摩羯座", description: nil>
1.find()/findOne()
一般使用find的情况是直接按照id查找
例如:User.find('5497793c73616e2a0c010000')
"{}"是否省略不影响查询,都表示查找集合A下的所有文档。也可以以文档做条件:db.A.find({"a":1,"b":1}),其中查找同时满足属
性a等于1且属性b也等于1的文档,若需要满足属性c等于1,可直接添加到文档中:db.A.find({"a":1,"b":1,"c":1})。
2.指定键的设置
指定键的设置即展示,比如某集合有10个属性,经查询后只关心集合中文档的某几个属性。如下文档:
{ "_id" : ObjectId("5018da521781352fe25bf4d2"), "a" : "1", "b" : "1", "c" : "1", "d" : "1", "e" : "1" }
只关系属性a,b,c可如下设置:
db.A.find({},{"a,":1,"b":1,"c":,"_id":0})
这里的1和0与文档中的键值是不同意义的,这里的1:表示显示,0:表示不显示。其中"_id"键默认存在的,需要显示设置。
结果如下:
{ "a" : "1", "b" : "1", "c" : "1" }
 
--------------------------------------条件查询可类比结构化查询语句SQL--------------------------------------------
3.条件查询
3.1 条件操作符
"$lt"===================>"<"
"$lte"==================>"<="
"$gt"===================>">"
"$gte"==================>">="
"$ne"===================>"!="
如:某集合B集合中文档有属性x值为整数,需查找10<x<=30的文档,写法如下:
db.B.find({"x":{"$gt":10,"$lte":30}})
如:从某集合B中查找日期属性day值大于2012/01/01的文档数据,写法如下:
db.B.find({"day":{"$gt":new Date("2012/01/01")}})
适合于需要进行日调度、月调度、周调度数据等业务处理范围的场合。
3.2 $in包含/$nin不包含
$in:查询匹配指定条件值的文档;
$nin:查询不匹配指定条件值的文档;
SQL:写法:字段 in ('值1','值1'.....)
mongodb:db.B.find({"x":{"$in":['值1','值2',.....]}})
SQL:写法:字段 not in ('值1','值1'.....)
mongodb:db.B.find({"x":{"$nin":['值1','值2',.....]}})
$in/$nin优点:可指定不同类型条件和值。
3.3 $or或查询
$or:查询匹配多个条件多个值的文档;
SQL:写法:字段1 = 'xxx' or 字段2 in ( 'xxx').....
mongodb:db.B.find({"$or":[{"x":{"$in":['值1','值2'...]}},{"y":"3"}]})
3.4 $all匹配所有
比如文档:
{"name":jack,"age":[1,2,3]}
{"name":jack,"age":[1,4,3]}
db.B.find({"age":{"$all":[2,3]}})结果:{"name":jack,"age":[1,2,3]}
3.5 $exists 判断文档属性是否存在
db.B.find({"name":{"$exists":true}})   --查找属性name存在的文档
db.B.find({"name":{"$exists":false}})  --查找属性name不存在的文档
3.6 属性值为null情况
如下操作并可知道:
> db.C.find()
{ "_id" : ObjectId("5018fccd1781352fe25bf511"), "a" : "14", "b" : "14" }
{ "_id" : ObjectId("5018fccd1781352fe25bf512"), "a" : "15", "b" : "15" }
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }
> db.C.find({"c":null})
{ "_id" : ObjectId("5018fccd1781352fe25bf511"), "a" : "14", "b" : "14" }
{ "_id" : ObjectId("5018fccd1781352fe25bf512"), "a" : "15", "b" : "15" }
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }
可见查询属性c值为null文档,包括属性c值为null、该属性c不存在两个部分。若想只查询属性c为null的文档
如下:
> db.C.find({"c":{"$in":[null],"$exists":true}})
{ "_id" : ObjectId("5018fccd1781352fe25bf510"), "a" : "13", "b" : "13", "c" : null }
3.7 $not元条件句
可与其他条件配合使用,即不在匹配范围之内的文档,下面可见其用法。
3.8 $mod取模运算
db.B.find({"age":{"$mod":[5,1]}}) --表示查找年龄/5余1的所有文档
若查找年龄/5余1之外的所有文档,可结合$not运算:
db.B.find({"age":{"$not":{"$mod":[5,1]}}})
3.9 正则表达式
db.B.find({"name":/jack/i})
3.10 $size
> db.C.find()
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }
> db.C.find({"b":{"$size":2}})
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }
3.11 $slice
返回数组的一个子集,即对以某属性为基础,返回多少条(范围)。也可以接受偏移值和要返回的元素数量,来返回中间的结果。
> db.C.find()
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 1, 2, 3 ] }
{ "_id" : ObjectId("501e71607d4bd700257d8a42"), "a" : "1", "b" : [ 1, 2 ] }
> db.C.findOne({},{"b":{"$slice":[2,3]}})
{ "_id" : ObjectId("501e71557d4bd700257d8a41"), "a" : "1", "b" : [ 3 ] }
> db.C.findOne({},{"b":{"$slice":-2}})
{
        "_id" : ObjectId("501e71557d4bd700257d8a41"),
        "a" : "1",
        "b" : [
                2,
                3
        ]
}
3.12 $where
即可执行任务javascript作为查询的一部分。
$where的值可以是function、也可以是字符串等等。
db.C.find({"$where":function(){return this.a == "1"}})与db.C.find({"$where":"this.a == '1'"}})
注意:采用$where子句查询在速度上较常规查询慢的多。因文档需要从BSON转换成javascript对象,然后通过"$where"的表达式来运行。
      不用利用索引。可用常规查询做前置过滤,配置"$where"查询进行调优,可达到不牺牲性能的要求。
4 游标
使用游标返回find的执行结果,客户端对游标的实现通常能对结果进行数量的限制、略过部分结果、排序等有效控制。
var cursor = db.C.find()     --定义游标
while(cursor.hasNext()){
 var obj = cursor.next();
 print(obj.a);
 ......
}
db.C.find().limit(10)  --限制查询的结果条数为10条
db.C.find().skip(10)   --忽略匹配的前10条,显示从第11条匹配的文档开始所有的文档
db.C.find().sort({"a":-1})  --sort以键/值,表示按某个属性进行排序,1:升序,-1:降序
高级查询选项:
$maxscan:integer  --指定查询最多扫描的文档数量
$min:document     --查询的开始条件
$max:document     --查询的结束条件
$hint:document    --指定服务器使用哪个索引进行查询
$explain:boolean  --获取查询执行的细节(用到的索引、结果数量、耗时等),而并非真正执行查询
$snapshot:boolean --确保查询的结果是在查询执行那一刻的一致快照

mongodb 查询操作,条件查询,where,find等常用操作相关推荐

  1. NHibernate之旅(4):探索查询之条件查询(Criteria Query)

    本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Ex ...

  2. Elasticsearch 入门(1):基本概念,安装教程,索引的创建,查询,删除,主键查询,修改,添加,聚合查询,条件查询

    Elasticsearch 入门 基本概念 The Elastic Stack, 包括 Elasticsearch.Kibana.Beats 和 Logstash(也称为 ELK Stack).能够安 ...

  3. 【示例】solr添加文档/删除文档/简单查询/多条件查询

    solr添加文档/删除文档/简单查询/多条件查询

  4. MySQL 基本查询、条件查询、投影查询

    文章目录 1. 基本查询 2. 条件查询 3. 投影查询 练习 LeetCode 595. 大的国家 练习 LeetCode 584. 寻找用户推荐人 练习 LeetCode 1173. 即时食物配送 ...

  5. Mybatis-Plus查询之条件查询(用户名查询)(批量查询)

    Mybatis-Plus查询之条件查询(用户名查询)(批量查询) 上代码 上代码 //查询多个用户//Arrays.asList 工具类List<User> users = iUserRe ...

  6. 1.实现sql语言中DQL语言,实现简单查询、条件查询、排序查询等。

    1.实现sql语言中DQL语言,实现简单查询.条件查询.排序查询等. (1)检索grade表当中的所有信息. (2)检索grade表数学成绩大于100的所有人信息. <%@ page langu ...

  7. MySQL查询之条件查询

    前言 之前总结了MySQL查询中的 基础查询 接下来将在本篇进行MySQL中的条件查询的总结 条件查询语句 条件查询就是在基础查询的基础之上,添加判定条件,对数据进行筛选,查找到相对应的数据 这时我们 ...

  8. mongodb java 多条件查询_MongoDB查询之高级操作详解(多条件查询、正则匹配查询等)...

    MongoDB查询之高级操作 语法介绍 MongoDB查询文档使用find()方法,同时find()方法以非结构化的方式来显示所有查询到的文档. -- 1.基本语法 db.collection.fin ...

  9. MongoDB 添加、查询(条件查询、排序、分页、返回指定字段)、修改、删除数据、聚合aggregate

    MongoDB内部支持JavaScript语法,使用SpiderMonkey作为内部的JavaScript解释器引擎. 1.常用命令 show databases:显示数据库列表 use:切换数据库 ...

最新文章

  1. 行货手机和水货手机究竟啥区别
  2. PostgreSQL Oracle 兼容性之 - PL/SQL DETERMINISTIC 与PG函数稳定性(immutable, stable, volatile)...
  3. 快速双边滤波在High-Dynamic Range(HDR)图像显示中的应用。
  4. oracle 关于日期格式转换与使用
  5. Linux高效数据统计命令wc
  6. 微服务架构如何保证安全性?
  7. 7.24 校内模拟赛
  8. 变量在函数内外的作用域 3
  9. GitBash添加tree命令
  10. java商城项目中多线程执行_java多线程中执行多个程序的实例分析
  11. 存储过程、游标和触发器
  12. php 类似百度分页,写了一个仿百度贴吧分页效果的分页类,有人要么?
  13. ymodem传输的终端工具_国六在线监控OBD终端H6S信息安全防篡改技术实现
  14. 传感器系列之4.6雨滴传感器
  15. 判断最小生成树的唯一性
  16. python的str是什么意思?
  17. 史上最全机器学习资源整理
  18. HTML标签的属性和特性
  19. [FAQ10019]HDMI/MHL如何修改手机默认横竖屏显示方式
  20. Python处理txt文件:多句分行+行首尾添加字符+for循环--Python新手自练系列

热门文章

  1. 国内主流平台QMT和Ptrade哪个软件更好用?应该怎么选择?
  2. 2020年8月20计算机大赛,NOI2020于8月17日正式开幕!今年哪些竞赛选手被保送清北计算机专业?...
  3. 彩票走势图xcode源码
  4. 清除浮动的几种方式,以及各自的优缺点
  5. 医学图像分割UNet
  6. Linux系统常用命令查看进程的用法
  7. 阅文java面试_【上海阅文集团Java面试】阅文后端Java,二轮技术一轮HR-看准网
  8. Vue Get请求数据
  9. 健康档案管理系统-毕业设计-SSM框架-SpringBoot2.X-VUE-Antd-MyBatis-Shiro
  10. 李俊峰:碳达峰、碳中和决策不是心血来潮,2030年碳达峰不是一件特别难的事