购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5.5 查询操作

在关系型数据库中,可以实现基于表的各种各样的查询,以及通过投影来返回指定的列,相应的查询功能也可以在MongoDB中实现。同时由于MongoDB支持嵌套文档和数组,MongoDB也可以实现基于嵌套文档和数组的查询。

1.find简介

MongoDB中查询文档使用find()方法。find()方法以非结构化的方式来显示所要查询的文档,查询数据的语法格式如下:

query为可选项,设置查询操作符指定查询条件,projection也为可选项,表示使用投影操作符指定返回的字段,如果忽略此选项则返回所有字段。

查询test集合中的所有文档时,为了使显示的结果更为直观,可使用.pretty()方法以格式化的方式来显示所有文档,方法如下:

除了find()方法,还可使用findOne()方法,它只返回一个文档。

2.查询条件

MongoDB支持条件操作符,表2.8为MongoDB与RDBMS的条件操作符的对比,读者可以通过对比来理解MongoDB中条件操作符的使用方法。

表2.8 MongoDB与RDBMS的查询比较

3.特定类型查询

特定类型查询结果在test集合中有以下文档为基础:

查询age为null的字段的语法格式如下:

此语句不仅匹配出age为null的文档,其他不同类型的文档也会被查出。这是因为null不仅会匹配某个键值为null的文档,而且还会匹配不包含这个键的文档。

查询数组可使用以下语法格式:

查询有3个元素的数组的代码如下:

查询数组里的某一个值的代码如下:

limit()函数与SQL中的作用相同,用于限制查询结果的个数,如下语句只返回3个匹配的结果。若匹配的结果不到3个,则返回匹配数量的结果:

skip()函数用于略过指定个数的文档,如下语句略过第一个文档,返回后两个:

sort()函数用于对查询结果进行排序,1是升序,1是降序,如下语句可将查询结果升序显示:

使用$regex操作符来设置匹配字符串的正则表达式,不同于全文检索,使用正则表达式无须进行任何配置。如下所示为使用正则表达式查询含有MongoDB的文档:

4.游标

游标是指对数据一行一行地进行操作,在MongoDB数据库中对游标的控制非常简单,只需使用find()函数就可以返回游标。有关游标的方法参见表2.9。

表2.9 MongoDB游标的使用

使用游标时,需要注意下面4个问题。

(1) 当调用find()函数时,Shell并不立即查询数据库,而是等真正开始获取结果时才发送查询请求。

(2) 游标对象的每个方法几乎都会返回游标对象本身,这样可以方便进行链式函数的调用。

(3) 在MongoDB Shell中使用游标输出文档包含两种情况,如果不将find()函数返回的游标赋值给一个局部变量进行保存,在默认情况下游标会自动迭代20次。如果将find()函数返回的游标赋值给一个局部变量,则可以使用游标对象提供的函数进行手动迭代。

(4) 使用清空后的游标,进行迭代输出时,显示的内容为空。

游标从创建到被销毁的整个过程存在的时间,被称为游标的生命周期,包括游标的创建、使用及销毁三个阶段。当客户端使用find()函数向服务器端发起一次查询请求时,会在服务器端创建一个游标,然后就可以使用游标函数来操作查询结果。以下三种情况会让游标被销毁。

● 客户端保存的游标变量不在作用域内。

● 游标遍历完成后,或者客户端主动发送终止消息。

● 在服务器端10分钟内未对游标进行操作。

以下语句显示使用游标查找所有文档: jYHITsLg7sUbP1IJwocwRFHy59i6yJxCV4rRQuwmAo5hsxNf8v8I1mV8RW6UefUC

点击中间区域
呼出菜单
上一章
目录
下一章
×