Navicat 博客

2019 年 9 月 23 日,由 Robert Gravelle 撰写

SQL查询通常从数据库服务器返回多行数据。关系型数据库提供光标,作为迭代每一行数据结果的一种手段。 这是否意味着MongoDB用户不走运? 事实证明,MongoDB的db.collection.find() 函数返回一个光标。 在MongoDB中,光标本身提供了用于处理单一行的额外功能。 在今天的博客中,我们将学习如何在Navicat for MongoDB中使用MongoDB光标。

简单迭代示例

执行一个通过db.collection.find() 函数查询的指令将返回指向返回文档集合的指针,该指针即是光标。 光标的默认行为是允许对查询结果进行自动迭代。 但是,开发人员可以显式浏览光标对象中返回的条目。 其中一种方法就是使用forEach() 光标方法。

在Navicat中,很容易使用find() 方法。 例如,你可以将预定义的代码段拖到“查询编辑器”中:

或者,你可以使用“查找创建工具”。 只需选择“集合”或“视图”即可获取所有文档:

从那里,你可以将forEach() 直接链接到结果光标。 在下面的示例中,集合中的三个文档被输出打印到控制台。 你可以在“打印输出”选项卡中查看输出结果:

不同种类的循环

像所有JavaScript对象一样,光标可以存储在变量中以做将来使用。 由于cursor.hasNext()和cursor.next() 方法,它还完全支持其他JavaScript结构(如while循环)。 正如我们在本例中看到的,hasNext() 通知循环测试器是否有另一个文档要遍历;next() 则返回所述文档。

printjson() 方法是一种方便的程序方法,它取代了print(tojson())。 它基本上按照数据库存储的内容来输出文档,只是它们是以JSON而非BSON(等效的二进制文件)的形式来呈现。

数据更新

回想一下db.collection.find() 返回一个指向返回文档集合的指针。 这样,文档字段是完全可编辑的。 因此,我们可以调用forEach() 方法来更新符合指定条件的文档。 这是一个用于更新名字等于“Tom Smith”的文档的函数:

在我们的案例中,只有一个匹配的文档,但是从理论上讲,可以有很多。

数据转换

一种数据转换类型是简化数据集的结构,以使其更易于使用。 为此,我们可以使用map() 函数。 本示例将split() 函数应用于 name 字段,以将其分解为名和姓两个部分。 然后,reverse() 和join() 方法将“Tom Smithers”转换为“Smithers, Tom”:

结论

在今天的博客中,我们看到了db.collection.find() 方法返回的光标如何与各种方法一起打包以遍历文档,以用于打印、修改、删除、或转换其内容。 是否对Navicat for MongoDB有兴趣? 你可以点击这里下载免费试用!

Navicat 文章
频道条目
分享
文章归档