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 官方弃用 Perl 驱动,Perl 你还好吗?