mongodb_查询操作使用_条件查询、where子句等(转)
<?php
/* mongodb_查询操作使用_条件查询、where子句等(转并学习)1.find()/findOne()mongodb数据库的查询操作即使用find()或者findOne()函数,也可根据不同的条件进行查询。查询的写法(以find()为例)可以如下:db.A.find()/db.A.find({})"{}"是否省略不影响查询,都表示查找集合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子句等(转)的更多相关文章
- Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终端打印SQL语句,脚本调试)
Django---Django的ORM的一对多操作(外键操作),ORM的多对多操作(关系管理对象),ORM的分组聚合,ORM的F字段查询和Q字段条件查询,Django的事务操作,额外(Django的终 ...
- util-C# 复杂条件查询(sql 复杂条件查询)查询解决方案
ylbtech-funcation-util: C# 复杂条件查询(sql 复杂条件查询)查询解决方案 C# 复杂条件查询(sql 复杂条件查询)查询解决方案 1.A,Ylbtech.Model返回 ...
- java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)
1.条件match query查询 //条件查询match query @Test public void test10() throws UnknownHostException { //1.指定e ...
- SpringData JPA快速入门和基本的CRUD操作以及Specifications条件查询
SpringData JPA概述: SpringData JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作 ...
- MySQL--详细查询操作(单表记录查询、多表记录查询(连表查询)、子查询)
一.单表查询 1.完整的语法顺序(可以不写完整,其次顺序要对) (不分组,且当前表使用聚合函数: 当前表为一组,显示统计结果 ) select distinct [*,查询字段1,查询字段2,表达式, ...
- MySQL数据库查询操作进阶——多表查询
多表查询 在大部分情况下,我们用到的表都是彼此相关联的,所以我们会有相当大的需求用到跨表的查询,这个时候我们就需要将相关联的表连起来做多表查询. 多表查询分为连表查询和子查询,连表查询即将相关联的表连 ...
- angularJS 条件查询 品优购条件查询品牌(条件查询和列表展示公用方法解决思路 及 post请求混合参数提交方式)
Brand.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...
- 分页查询关键代码 多条件查询关键代码 删除选中商品关键代码 修改要先回显再修改 修改要先回显再修改 同一业务集中使用同一servlet的方法
分页查询关键代码: 通过servlet转发回来的各种信息进行分页的设计(转发回的信息有 分页查询的List集合 查询的页码 查询的条数 查询的数据库总条数 查询的总页码) 从开始时循环10次出现十个数 ...
- php学习之sqlite查询语句之多条件查询
一.PHP+Mysql多条件-多值查询示例代码: index.html代码:<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitio ...
随机推荐
- linux-01Red Hat Enterprise Linux 7(RHEL7)配置静态IP地址
为方便在学习linux readhat7,在本地安装安装了虚拟机.为能够用win7连接虚拟机的linux远程客户端操作,则需要虚拟机和win本地的网络互通: 操作如下:1.本地配置ip地址 : 2.验 ...
- Spring基础知识汇总
Spring优点: 低侵入式设计,代码的污染极低: 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺: Spring的IoC容器降低了 ...
- QSS总结以及最近做的Qt项目
什么是QSS QSS称为Qt Style Sheets也就是Qt样式表,它是Qt提供的一种用来自定义控件外观的机制.QSS大量参考了CSS的内容,只不过QSS的功能比CSS要弱很多,体现在选择器要少, ...
- 第十八章:Android 打包部署
Andriod应用程序如果要在手机或模拟器上安装,必须要有签名! 1.签名的意义 为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的Package Name来混淆替换已经安装的程序, ...
- 初学者利用git 上传代码到Coding的简单操作步骤
1.首先登陆coding网站注册账号https://coding.net/ (注册完后需登陆邮箱激活邮件) 2.登陆刚注册的coding账号 ,添加项目 添加项目—〉输入项目名称—〉输入对项目的简单描 ...
- 实验五 含有控制信号的计数器VHDL设计
一.实验目的 学习计数器的设计.仿真和硬件测试,进一步熟悉VHDL设计技术. 二.实验仪器与器材 计算机1台,GW48-PK2S实验箱1台,QuartusⅡ6.0 1套. 三.实验 1. 基本命题 在 ...
- Html5 学习系列(五)Canvas绘图API快速入门(2)
Canvas绘图API Demos 上一篇文章中,笔者已经给大家演示了怎么快速用Canvas的API绘制一个矩形出来.接下里我会在本文中给各位介绍Canvas的其他API:绘制线条.绘制椭圆.绘制图片 ...
- xib与nib的区别
xib和nib都是Interface Builder的图形界面设计文档,nib这个名字来自于NeXTSTEP系统,在NeXTSTEP被Apple收购之前,一直使用nib作为Interface Buil ...
- JAVA学习Swing章节JPanel和JScrollPane面板的简单学习
package com.swing; import java.awt.Container; import java.awt.GridLayout; import javax.swing.JButton ...
- 微信小程序笔记(二)
微信小程序环境搭建与开发工具介绍 2-1 开篇介绍及下载工具 1.开发工具下载地址: http://t.cn/RVKH0HS 2.下载安装对应版本:win32,win64,mac; 2-2 小程序 ...