mongodb简单查询

来源:互联网 发布:雷电抢购软件 编辑:程序博客网 时间:2024/05/18 03:37

      最近一段时间比较闲,老大做代码整合,我得以有足够的时间来学习。因为语言学多了,慢慢也觉得没有什么意思了。其他组用mongodb,我也跟下潮流,学习了一点。鉴于我这种快速上手的,因为基础不怎么牢靠,也总是会忘记。看着《mongodb权威指南》,虽然是英文版的,但是没有一点阅读的难度,大概是这本书写得确实是让人好理解吧。平时看一些英文的资料,坚持一个小时就不错了,犯困,看这个,不会困,只是会有些命令不能马上理解。先说下查询吧。我觉得我对于数据库的了解只是限于增删改查这些操作,至于更深入的东西,不管是对于哪种数据库都没有深入接触过。毕竟不是DBA嘛,我们只要知道怎样用自己熟悉的语言调用数据库就好了。

      关于mongodb的一些介绍,我也不再累赘了,网上多得是,据说是非关系型数据库,好多时候感觉不像是数据库,更接近某些函数,当然mongodb确实封装了很多函数了。

 1.find

   

  content是一个collection,相当于关系型数据库中的表,db是固定不变的。如果find中没有带参数,就相当于

 select * from table

  返回数据表中的所有记录的所有字段。

 可以查询符合某些条件的记录(document)。


查询gender字段是male的document,相当于select * from table where gender=male

当然查询条件可以是多个


很简单的语句,我就不做太多解释了,大家都懂得啊。

所有字段都返回,把人看得眼花缭乱的,要是能选择关注的字段就好了。那是当然了。


其中_id是插入数据之后,数据库自动给加上的,相当于主键。一定要看清楚了,find所带的参数,除条件之外,还有一个{},将字段的值设置为1表明是要将这个字段显示出来。_id虽然没有显式输出,也会输出。当然,还可以 指定不要输出的字段,


将_id设置为0,表明明确声明不显示这个字段,所以就只显示我们强烈要求要输出的字段喽!

2.使用>,>=,<,<=,!=分别对应gt,gte,lt,lte,ne

例如查找age在10到25之间的document


查找degree不是bachelor的document


关于or,有两种实现方法,当然,这两种方法对应不同的场景。

使用in,判断某个字段是否属于集合中的一员,

例如查看age是11或者15或者22或者是25的document


使用nin查找不在一个范围之内的


当然,使用in来判断时候是有局限性的,只能判断一个字段。如果是需要匹配两个字段,in就不能满足要求了,那就需要or关键字了。


 mod是求余运算,跟在其他课程中学习的并没有什么两样。第一个参数是除数,第二个参数是余数。


3.具体类型查询


这是content种的各个document,下面要对这个collection进行查询

null大家应该很熟悉,就是空。在content中有一个document的post字段是null。如果想查找这个document,


如上查询结果,除了post确实为null的document之外,没有post地段的也都输出了,这个肯定是不符合要求的,这时候exists关键字出现了。



mongodb中支持正则表达式,

比如查找name是lunar或者是Lunar的document

flags(i)是可有可无的,有则表明忽略大小写

我们可以查找包含某些字符串的,与常见的正则表达式没有什么不同。


查找数组

先看collection的结构


如果你想查找的字符串要匹配不只一个字段,可以使用$all来实现。


数组的匹配通常来说都是精确匹配的,这样一来,如果数组中内容的顺序不同,会导致不正确的查找结果。


索引是 从零开始的,上述语句指名要查询的数组的第二个元素是apple.

4嵌套结构的查找

使用的collections


如果想查找叫xin lau的document,则下列语句是对的


但是我们突然想给这个document增加一个middle字段,那么上面的查询语句就立马失效了。因为mongodb中都是精确匹配每个字段的,那怎么办呢?明确指定字段



上述是总结的一点点新的,觉得mongodb好像也不难,只是现在还是不熟悉它的一些奇妙的地方,觉得不像是一种数据库,更像是一种函数功能很强大的工具。不过,后续可能还会继续关注


原创粉丝点击