MongoDB游标在Perl中散列

Posted

技术标签:

【中文标题】MongoDB游标在Perl中散列【英文标题】:MongoDB cursor to hash in Perl 【发布时间】:2017-11-01 20:10:57 【问题描述】:

所以,我正在从 MongoDB 中检索一些值。我现在 find 方法返回一个 cursor,它会延迟加载查询结果。我想将游标存储为哈希,但我可以找到任何方法。当然,您可以遍历光标并自行填充,但我对自动化方式感兴趣。例如,在 Python 中,您可以这样做:myList = list(col.find()) 将所有光标项作为一个列表。

是否可以在 Perl 中做类似的事情?

【问题讨论】:

您希望密钥是什么?您提供的 Python 示例看起来像一个数组。有一种方法可以一次获取所有文档。 @simbabque 作为 mongo docs (search.cpan.org/dist/MongoDB/lib/MongoDB/Collection.pm) 状态,检索到的文档与哈希相同。所以我想将检索到的文档中的键用作键。你在说什么方法?它也很有用 metacpan.org/pod/MongoDB::QueryResult#all 一次将所有搜索文档作为列表提供。我以前从未使用过 MongoDB,但在我看来,next 返回了一个完整的文档。那是你的哈希值。 @simbabque 当然可以!在这里询问后,当我读到它时,我误解了一些东西。谢谢你的澄清,这解决了我的问题! 不客气。下次,只需尝试查看通过 Data::Dumper 或类似方法返回的数据。文档可能会令人困惑,但数据就是这样。 :-) 【参考方案1】:

当您调用find 时,它会返回一个cursor object,它将迭代器方法委托给MongoDB::QueryResult。当您对该事物执行next 时,它会懒惰地一次返回一个文档。该文档已经是完整的数据集。这可能已经是一个哈希引用(或者一个对象,我不知道)。

use Data::Dumper;
while (my $object = $cursor->next) 
    print Dumper $object;

如果您想要一次全部使用它们,您可以使用all 方法获取一个列表,然后您可以将其放入一个数组并在方便时使用。这不会按需加载。

my @objects = $cursor->all;

【讨论】:

以上是关于MongoDB游标在Perl中散列的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB的游标操作

MongoDB 官方弃用 Perl 驱动,Perl 你还好吗?

mongodb游标学习

GraphQL 和 MongoDB 游标

PHP 的 foreach 如何与 MongoDB 游标配合使用?

mongoDB中级篇①游标cursor