MONGODB 查询晋级(二)

MONGODB的使用最近是越来越“不慌张”,某网站上关于MONGODB 部分替换传统数据库表的设计的思路是越来越多,其实mongoDB 可以做的事情很多,不过目前的问题是开发人员可能使用MONGODB 思路还处于萌芽的状态,另外可能一些 SQL 到 MONGO FIND 的查询语句不大熟悉,其实MONGO FIND 的写法不复杂,有些SQL 的高级查询 MONGODB 大多数都是么有问题,有问题也大多是人在设计MONGODB 的collection 的问题,不过这也不是什么问题,加个字段,7*24 小时,对其他的业务系统,加一个字段考虑的问题颇多,而MONGO 大多不用考虑,这点是令人欣慰的。

接上期,本期MONGODB 查询也得复杂一点了。

有兴趣可以看看JSON的整体格式规范,1个小时就OK了

首先我们的有一个查询的数据基础,这样在讨论起来才有的说

MONGODB 查询晋级(二)

上面就是本次要discuss的数据,当然不是这一条,仅仅展示大致的格式

接上期说

需求1 需要查询 qty 为 50 的数据,途中的查询语句很清晰,大括号里面的中括号,键值用双引号引起,之后跟上你的要查询的数据

select * from inventory where qty = 50 这样的传统SQL 的写法

MONGODB 查询晋级(二)

需求2 传统的DBA 会对上面的写法说点什么,不能用* ,用哪个字段就要写哪个字段,MONGO 也是一样,请在查询结果中紧紧展示 qty 其他字段都不展示, 写法就是在刚才的查询后面添加一个条件过滤的方式,需要显示的字段标记 1 不需要显示的显示标记0

select    qty from inventory where qty = 50

MONGODB 查询晋级(二)

需求3 显示SIZE 字段中 H 属性为 10的数据

select item,qty,size from inventory where size.h = 10

如果数据里面有嵌套,则需要从根部的节点开始写起

MONGODB 查询晋级(二)

需求 4 我们查询 SIZE.H 大于等于10 的并且 ITEM 是PLANNER 的数据

select item,qty,size.h,size.w from inventory where size,h >= 10 and item = "planner"

MONGODB 查询晋级(二)

需求5 有一些需求在传统的数据库中是不存在的,你可以查询字段是不是为 NULL ,空,但你在已经固化好的表SCHEMA 中,你是不会问每行的数据的字段是不是存在,但MONGODB 的字段在每一个 document 可能是不存在的。所以下面的语句在传统的数据库中是没有可比性的

下面的查询就是查询 status 这个KEY 存在于 inventory collection 的具体记录,当然你也可以查询到底有多少 docuemnts 存在在这个collection的数量。

MONGODB 查询晋级(二)

计算collection中有多少 有status 这个KEY的documents 的数量

非要用传统的SQL 语句表达,select count(*) from inventory as a where status is not null (只能是贴近,因为其实用IS NOT NULL 表达不准确)

MONGODB 查询晋级(二)

需求6  如果我们要查询一个数值的范围,怎么查询,这里面的提醒有些 DEVELOPER ,就算是MONGODB 的SCHEMA 你也不能想一出是一出,如果你后期的查询的数值是用 RANGE 的方式查询的,建议还是使用非,“”双引号的字符来进行,这样以后处理起来,性能上不是很好。

select item,qty,size.h,size.w from inventory where qty between 45 and 50

MONGODB 查询晋级(二)

需求 7 传统查询中的 IN 是用的比较多,怎么来用MONGODB 的方式来表达

select item,qty,size.h,size.w from inventory where qty in (45,50)

MONGODB 查询晋级(二)

需求 8 排序和 输出前几条数据

限制显示数据的数据量,在末尾加入.limit(显示数量) ,和SQL SERVER  top ,mysql 的 limit , ORACLE rownum 一样

MONGODB 查询晋级(二)

排序的方法也是很简单,在查询的语句后面加上sort({你要排序的字段以及你是正序还是倒序}), 这里建议如果没有必要,不要进行排序。

MONGODB 查询晋级(二)

需求9 最后我们看一下,一个比较不常见的document,这是一个数组中包含嵌套的数据存储方式,且不说这样好不好,我们现在的需求就是查询 TAGS 中type2 是 IRON 的记录

下面是这个document的格式

MONGODB 查询晋级(二)

查询方法 需要使用特殊的 elemMatch查询方法,来查询这样的需求

MONGODB 查询晋级(二)

相关文章: